Отладка и инструменты отладки в Elixir?


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

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

спасибо

5 57

5 ответов:

можно использовать IEx

require IEx

value = {:some, :erlang, :value}
IEx.pry

если вы запустите эту программу с например iex -s program.exs (или iex -S mix для проекта) вас спросят, хотите ли вы разрешить совать нос в этот код, когда он будет достигнут и value будет доступно для вас для осмотра.

вы также можете просто выполнить отладку печати с помощью IO.inspect позволяет выводить в основном любую структуру данных erlang.

отладка ковбойских приложений и приложений Phoenix.

Я видел этот пост в Elixir rader http://www.jessetrimble.net/iex-pry-elixir, и подумал, что я просто суммирую его здесь, так как это очень удобно :-).

в приложениях Rails (и других) вы можете просто поместить тег отладчика в свой контроллер, и когда путь будет запущен, он сломается в теге отладчика.

при использовании подглядывать в Фениксе выше будет в результате

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]

можно использовать Quaff.Debug модуль от https://github.com/qhool/quaff

модуль отладки предоставляет простой вспомогательный интерфейс для запуска Elixir код в графическом отладчике erlang

Я проверил его сегодня с эликсиром 1.0.4, он работает.

используйте отладчик Erlang. Пример с Phoenix 1.3 и Elixir 1.5.1, исходный файл: ./Либ/задач/по 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:

  • на левой панели в окне монитора отображается загруженный модуль.
  • меню модуля, нижний пункт показывает загруженный модуль с подменю " вид " и "удалить". Используйте меню Вид, чтобы увидеть источник с номерами строк.
  • чтобы установить точку останова, используйте Перерыв меню, разрывы строк...
  • запускайте программу до тех пор, пока она не остановится в указанной строке. На мониторе windows отображается процесс со статусом 'break'. Дважды щелкните на этой строке, чтобы открыть вложенный процесс в отладчике. Здесь вы можете шагать, перешагивать (далее), продолжать, подниматься, проверять значения и т. д. Чтобы войти в другой модуль, он должен быть загружен, как и выше.
  • точка останова будет проигнорирована, если она установлена неправильно. Если у вас есть многострочный конвейер, поместите точку останова на последняя строка.

в Elixir 1.5 и OTP 20 появилась новая функция Exception.blame/3 который может добавить отладочную информацию к некоторым исключениям. Он поддерживает только FunctionClauseErrors прямо сейчас, и вы должны использовать его только в разработке, потому что это дорогостоящая задача: функция будет извлекать доступные предложения из байт-кода и оценивать их по заданным аргументам. См. Пресс-Релиз