Средства отладки и отладки в Elixir?
Я только начал использовать Elixir и начал проект Phoenix, который мне очень нравится.
Теперь, имея рельсовый фон, я привык к тому, чтобы избавиться от отладочных инструментов, таких как "отладчик", "byebug" и т.д.; Мне было интересно, есть ли подобные инструменты для Elixir? Как вы, ребята, отлаживаете свои приложения Elixir?
Даже эквивалент Rubys raise my_object.inspect
, сделал бы чудеса!
Спасибо
Ответы
Ответ 1
Вы можете использовать IEx
require IEx
value = {:some, :erlang, :value}
IEx.pry
Если вы запустите эту программу, например, iex -s program.exs
(или iex -S mix
для проекта), вас спросят, хотите ли вы разрешить входить в этот код, когда он будет достигнут, и value
будет доступен для вас для проверки.
Вы также можете просто отлаживать отпечатки с помощью IO.inspect
, позволяя выводить в основном любую структуру данных erlang.
Ответ 2
Отладка приложений Cowboy и приложений Phoenix.
Я видел этот пост в Elixir rader http://www.jessetrimble.net/iex-pry-elixir, и думал, что просто подведу его здесь, поскольку он чрезвычайно удобен: -).
В приложениях Rails (и других) вы можете просто поместить тег отладчика в свой контроллер, и когда путь будет запущен, он будет разбит на тег отладчика.
При использовании pry в Phoenix вышесказанное приведет к
Cannot pry #PID<0.259.0> at web/controllers/posts_controller.ex:8. Is an IEx shell running?
Оказывается, что процесс Phoenix должен выполняться в сеансе IEx, это делается как таковое
iex -S mix phoenix.server
Теперь вместо этого вы увидите
Request to pry #PID<0.266.0> at web/controllers/posts_controller.ex:9. Allow? [Yn]
Ответ 3
Вы можете использовать модуль Quaff.Debug
из https://github.com/qhool/quaff
Модуль Debug предоставляет простой вспомогательный интерфейс для запуска Elixir кода в графическом отладке erlang
Я тестировал его сегодня с Elixir 1.0.4, он работает.
Ответ 4
Используйте отладчик Erlang.
Пример с Phoenix 1.3 и Elixir 1.5.1, исходный файл:./lib/todo/api/api.ex и имя модуля: Todo.API
~/elixir/todo_app/ iex -S mix phx.server
Erlang/OTP 20 [erts-9.0] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]
[info] Running TodoWeb.Endpoint with Cowboy using http://0.0.0.0:4000
Interactive Elixir (1.5.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :debugger.start()
{:ok, #PID<0.373.0>}
iex(2)> :int.ni(Todo.API)
{:module, Todo.API}
В отладчике Erlang:
- Левая панель в окне "Монитор" показывает загруженный модуль.
- В меню "Модуль" внизу отображается загруженный модуль с подменю "Просмотр" и "Удалить". Используйте меню "Вид", чтобы увидеть источник с номерами строк.
- Чтобы разместить точку останова, используйте меню "Разрыв", "Разрывы строк" ...
- Запустите программу, пока она не остановится на указанной строке. Окна монитора показывают процесс со статусом "break". Дважды щелкните эту строку, чтобы открыть подключенный процесс в отладчике. Здесь вы можете шагнуть, переходить (дальше), продолжать, подниматься, проверять значения и т.д. Чтобы войти в другой модуль, он также должен быть загружен, как указано выше.
- Точка останова будет проигнорирована, если ее неправильно разместить. Если у вас многострочный конвейер, поместите точку останова на последнюю строку.