Отладка и инструменты отладки в Elixir?
Я только начал использовать эликсир и начал проект Phoenix, который мне очень нравится. Теперь, имея фон rails, я привык быть испорченным с помощью инструментов отладки, таких как" отладчик"," byebug " и т. д.; Мне было интересно, есть ли подобные инструменты для Elixir? Как вы, ребята, отлаживаете свои приложения эликсира?
даже эквивалент Rubys raise my_object.inspect
, творит чудеса!
спасибо
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
прямо сейчас, и вы должны использовать его только в разработке, потому что это дорогостоящая задача: функция будет извлекать доступные предложения из байт-кода и оценивать их по заданным аргументам. См. Пресс-Релиз