i:im()
является пошаговым отладчиком (например, gdb
, lldb
или pdb
, который позволяет устанавливать точки останова, запускать программу, приостанавливать выполнение и т. Д.) На основе графического пользователя wxWidgetsинтерфейсная библиотека.MongooseIM - это сервер - он не связывает wxWidgets, потому что у него вообще нет графического интерфейса.
Из-за природы Erlang VM, где много параллельных действий происходят рядом, поэтапноотладчик не лучший инструмент для работы.Например, установка точки останова в процессе, который вызывается через gen_server:call()
, приведет к истечению времени ожидания вызова, что приведет к каскаду ошибок, возможно, не относящихся к отлаживаемой проблеме.
Однако виртуальная машина Erlang имеетвстроенное средство отладки, более подходящее для его параллельной природы - трассировочный отладчик .Трассировка не позволяет устанавливать точки останова или приостанавливать выполнение.Вместо этого он записывает (подмножество всех) точные события, происходящие в системе, и печатает / сохраняет их для апостериорной проверки.
Это видео и расшифровка стенограммы дают краткое введение в отслеживание на Erlang VM(в синтаксисе Elixir) , в то время как Матс Кронквист, один из ветеранов Erlang, подробно описывает эту тему в своем выступлении на Конференции пользователей Erlang 2014 года Извлечение printf из отладки printf .
При этом MongooseIM поставляется с двумя интерфейсами к механизму трассировки:
dbg - стандартный интерфейс OTP - этот пост SO показывает основы - будьте осторожны при трассировкев производстве, поскольку dbg не предоставляет никаких механизмов безопасности, поэтому возможна перегрузка производственной системы,
развед - способ более удобный и безопасный для производствабиблиотека трассировки, с выдающейся документацией.Вероятно, это ваш лучший выбор, если учитывать простоту применения и набор функций.