Много было сказано о методах отладки 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, и давайте поговорим.