Подтвердить что ты не робот

Средства отладки и отладки в Elixir?

Я только начал использовать Elixir и начал проект Phoenix, который мне очень нравится. Теперь, имея рельсовый фон, я привык к тому, чтобы избавиться от отладочных инструментов, таких как "отладчик", "byebug" и т.д.; Мне было интересно, есть ли подобные инструменты для Elixir? Как вы, ребята, отлаживаете свои приложения Elixir?

Даже эквивалент Rubys raise my_object.inspect, сделал бы чудеса!

Спасибо

4b9b3361

Ответ 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". Дважды щелкните эту строку, чтобы открыть подключенный процесс в отладчике. Здесь вы можете шагнуть, переходить (дальше), продолжать, подниматься, проверять значения и т.д. Чтобы войти в другой модуль, он также должен быть загружен, как указано выше.
  • Точка останова будет проигнорирована, если ее неправильно разместить. Если у вас многострочный конвейер, поместите точку останова на последнюю строку.