Как добавить приложение отладчика в rebar.config в MongooseIM? - PullRequest
0 голосов
/ 15 ноября 2018

Я использую MAC OS 10.14 с MongooseIM.Я хочу использовать отладчик в MongooseIM.Когда я выполняю im (). в оболочке MongooseIm, я получаю следующую ошибку:

Сбой вызова i: im / 0 в отладчике приложения.ok

Я могу убедиться, что могу запустить im (). в оболочке erlang $ erl .Кажется, мне нужно включить отладчик в MongooseIM, но я не знаю, как это сделать.Я не смог найти его в документах Erlang / Ejabberd / MongooseIM.Я также прочитал следующее, связанное с этим:

Вызов i: im () в отладчике приложения не удалось в mongooseim https://github.com/esl/MongooseIM/issues/1788

Согласно второму URL,Мне нужно добавить приложение отладчика в rebar.config в MongooseIM, но я не знаю как, пожалуйста, помогите.

1 Ответ

0 голосов
/ 15 ноября 2018

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

  • развед - способ более удобный и безопасный для производствабиблиотека трассировки, с выдающейся документацией.Вероятно, это ваш лучший выбор, если учитывать простоту применения и набор функций.

...