Много было сказано о методах отладки Elixir, но в этом посте я хотел бы дать краткий обзор всех возможных вариантов, которые могут служить справочной информацией, когда вам нужно отлаживать код Elixir. Хватит разговоров, давайте проверим каждую из них:

IO.inspect

Самый простой прием:

IO.inspect/2 также можно использовать внутри конвейеров, потому что он возвращает элемент, переданный для проверки. И совет здесь - использовать опцию label: для вывода строки, идентифицирующей каждую инспекцию:

IO.inspect с привязкой

binding/1 очень полезен, когда вы хотите увидеть все имена переменных и значения текущей функции:

вершина

Как и IO.inspect/2, библиотека apex заслуживает упоминания, особенно из-за ее макроса adef:

IEx.pry

Но это может быть очень утомительно и ограничивать отладку простой проверкой данных, например, IO.inspect или apex, когда IEx.pry/0 под рукой, потому что это позволяет вам проникнуть в текущий код. Поместите следующий код в строку, которую хотите подделать:

А теперь выполните свой код в сеансе IEx: iex -S mix или iex -S mix phx.server, если вы используете Phoenix Framework. Совет: если вы выполняете такие задачи, как начальные числа базы данных, вы можете проникнуть в этот код, запустив iex -S mix run priv/repo/seeds.exs или любой другой скрипт.

Как только выполнение кода доходит до IEx.pry, открывается интерактивная оболочка, позволяющая вам взаимодействовать с текущим кодом.

Перейдите в раздел Отладка Phoenix с помощью IEx.pry, если вам нужны дополнительные советы по отладке Phoenix с помощью IEx.pry.

: отладчик

Практически то же самое, что IEx.pry, который останавливает выполнение в точке останова и позволяет вам проверить текущий код, но :debugger дает вам приятный визуальный интерфейс, как в IDE:

Чтобы открыть этот отладчик, вам нужно запустить его и установить точку останова:

: sys.get_state и: sys.get_status

Этот работает только для процессов. Как следует из названия, :sys.get_state/1 получает текущее состояние процесса, причем не только от GenServer, но и от любого процесса:

Фрагмент взят из Просмотр состояния процессов в Эликсире.

Если вам нужно больше данных, чем только текущее состояние, просто вызовите :sys.get_status/1, который вернет всю информацию о процессе:

Снипет извлечен из Книги Эликсира программирования.

Бонус: вы можете заменить состояние процесса во время выполнения с помощью :sys.replace_state/2, что может быть очень удобно для проверки некоторых конкретных ситуаций.

Process.info

Вы также можете использовать Process.info/1 для получения информации о конкретном процессе:

: sys.trace

По-прежнему говоря об отладке процесса, еще один ресурс, который у нас есть, - это :sys.trace/2 для отслеживания вызовов процессов, которые будут отображать каждый вызов и изменение состояния вызывающего процесса:

Команды ликеро-водочного завода

После развертывания приложения в виде выпуска пакета может быть очень полезно получить информацию о нем, особенно если что-то работает не так, как ожидалось. Если вы развернули с помощью Distillery, вы скоро обнаружите, что mix не работает так же, как на вашем локальном компьютере, и это ожидаемо. Но вы можете выполнить некоторые команды в этом выпуске, вызвав bin/<app_name> <command>, еще две полезные команды: remote_console для запуска сеанса IEx в работающем выпуске и help, чтобы предоставить вам список всех команд.

: наблюдатель

Хотя это не совсем инструмент отладки, стоит упомянуть, что :observer помогает получить обзор работающей системы. Я не буду вдаваться в подробности, потому что есть много статей, в которых это уже делается, поэтому я просто оставлю здесь вызов функции для запуска наблюдателя:

Примечания и источники

Если у вас есть дополнительные советы и приемы, оставьте, пожалуйста, комментарий, чтобы я мог обновить этот пост и помочь распространить больше знаний об Эликсире. :)

Некоторые фрагменты кода были извлечены из отличной официальной документации или из официального руководства по началу работы.

Книга Эликсир программирования также использовалась в качестве источника.

Сегодня я узнал от Hashrocket также является отличным источником советов.

Подробнее откуда это взялось

Эта история публикуется в журнале Noteworthy, куда ежедневно приходят тысячи людей, чтобы узнать о людях и идеях, формирующих наши любимые продукты.

Следите за нашей публикацией, чтобы увидеть больше историй о продуктах и ​​дизайне, представленных командой Journal.

Ищете креативную компанию для реализации вашей следующей идеи? Ознакомьтесь с LNA Systems, и давайте поговорим.