0

我正在使用带有 MongooseIM 的 MAC OS 10.14。我想在 MongooseIM 中使用调试器。当我执行im(). 在 MongooseIm shell 中,我收到以下错误:

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

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

在应用程序调试器中调用 i:im() 在 mongooseim 中失败 https://github.com/esl/MongooseIM/issues/1788

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

4

1 回答 1

1

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

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

然而,Erlang VM 有一个更适合其并发特性的内置调试工具——跟踪调试器。跟踪不允许断点或暂停执行。相反,它记录系统中发生的确切事件(所有事件的一个子集)并打印/保存它们以供后验检查。

该视频和脚本简要介绍了 Erlang VM 上的跟踪(使用 Elixir 语法) ,而 Erlang 的资深人士之一 Mats Cronqvist在他的 Erlang User Conference 2014 演讲中详细阐述了这个主题。

话虽如此,MongooseIM 附带了两个跟踪机制的接口:

  • dbg - 标准 OTP 接口 -这篇 SO 帖子展示了它的基础- 如果在生产中进行跟踪,请小心,因为 dbg 不提供任何安全机制,因此可能会使生产系统过载,

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

于 2018-11-15T09:51:37.147 回答