如何在 MongooseIM 的 rebar.config 中添加调试器应用程序?

How to add debugger app in the rebar.config in MongooseIM?

我正在使用 MAC OS 10.14 和 MongooseIM。我想在 MongooseIM 中使用调试器。当我在 MongooseIm shell 中执行 im(). 时,出现以下错误:

在应用程序调试器中调用 i:im/0 失败。好的

我可以验证我可以 运行 im(). 在 erlang shell $ erl .看来我必须在 MongooseIM 中启用调试器,但我不知道该怎么做。我在 Erlang/Ejabberd/MongooseIM 文档中找不到它。我还阅读了以下与此相关的内容:

https://github.com/esl/MongooseIM/issues/1788

根据第二个 URL,我需要在 MongooseIM 的 rebar.config 中添加调试器应用程序,但我不知道如何,请帮助。

i:im() 是一个 逐步调试器 (如 gdblldbpdb 允许设置断点, 运行 基于 wxWidgets 图形用户界面库的程序,暂停执行等)。 MongooseIM 是一个服务器 - 它不捆绑 wxWidgets,因为它根本没有图形界面。

由于 Erlang VM 的性质,许多并发活动并排发生,逐步调试器不是完成这项工作的最佳工具。例如,在通过 gen_server:call() 调用的进程中设置断点会使调用超时,从而导致可能与正在调试的问题无关的级联错误。

但是,Erlang VM 具有更适合其并发特性的内置调试工具 - 跟踪调试器。跟踪不允许断点或暂停执行。相反,它记录(所有的一个子集)确切的事件 发生在系统中,prints/saves 他们进行后验检查。

此视频和文字记录提供 a brief introduction to tracing on the Erlang VM (in Elixir syntax), while Mats Cronqvist, one of the Erlang veterans, elaborates on the subject in his Erlang User Conference 2014 talk Taking the printf out of printf debugging

也就是说,MongooseIM 附带了两个跟踪机制的接口:

  • dbg - 标准 OTP 接口 - this SO post shows its basics - 如果在生产中进行跟踪,请小心,因为 dbg 不提供任何安全机制,因此可能会使生产系统过载,

  • recon - 一种对生产跟踪库更加用户友好和安全的方式,具有出色的文档。当考虑易用性和功能集时,这可能是您的最佳选择。