Технологии отладки в Elixir
Отладку первых приложений на новом языке логично начинать с вывода значений в терминал. Для этого в Elixir можно воспользоваться функциями IO.puts/2
и IO.inspect/2
. Но кроме этих способов отладки в Elixir существуют и другие.
В данной статье рассматриваются два из них — IEx.pry/0
и :debugger
.
IEx.pry
Инструмент pry прекрасно знаком Ruby-разработчикам, однако в Elixir он ведёт себя по-другому. Чтобы увидеть это, создадим новый проект с помощью mix
:
Поместим в файл lib/example.ex
следующий код:
Запустим новый сеанс в IEx и вызовем новую функцию:
IEx.pry/0
работет на базе IEx. Хотя этот отладчик не предоставляет такие традиционные решения, как пошаговое исполнение, расстановка точек останова и т. п., он отлично подходит для проведения отладки в режимах разработки или тестирования. Он запускается в вызывающем процессе, блокируя его и предоставляя доступ к его переменным, лексической структуре и другой информации. Сеанс в pry можно завершить вызовом функции respawn
, которая снова запустит IEx.
Узнать об этом подробнее можно
Debugger
Если существует необходимость в использовании точек останова, то на помощь придёт модуль :debugger
, встроенный в Erlang. Изменим пример так, чтобы он стал более наглядным:
Теперь приступим к отладке:
Вместе с отладчиком запустится и графический интерфейс. Вызываем :int.ni(Example)
для подготовки модуля к отладке, а затем ставим точку останова на третью строчку с помощью :int.break(Example, 3)
. Можно заметить, что после вызова функции статус процесса в отладчике изменился на «break»:
Процесс блокируется так же, как и в IEx.pry/0
. Можно добавить новую точку останова в окне отслеживания и продолжить проверку правильности кода, просмотр переменных и пошаговое наблюдение за исполнением программы.
В Debugger существуют и другие полезные возможности и команды. Подробнее об этом
Устранение ошибок
При выполнении :int.ni(Example)
в примере выше могут возникнуть ошибки:
-
Загрузить файл
int.erl
из PR. -
Скомпилировать его с помощью
erlc -o . int.erl
. -
Заменить файл
lib/debugger/ebin/int.beam
в папке установки Erlang на новый скомпилированный файл.