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

时间:2018-11-15 06:01:41

标签: debugging erlang ejabberd mongoose-im

我正在将MAC OS 10.14与MongooseIM一起使用。我想在MongooseIM中使用调试器。在MongooseIm Shell中执行 im()。时,出现以下错误:

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

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

Call to i:im() in application debugger failed in mongooseim https://github.com/esl/MongooseIM/issues/1788

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

1 个答案:

答案 0 :(得分:1)

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

由于Erlang VM的本质,其中许多并发活动会并发进行,因此逐步调试器并不是完成此工作的最佳工具。例如,在通过gen_server:call()调用的进程中设置断点会使调用超时,从而导致一连串的错误,可能与所调试的问题无关。

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

此视频和解说词提供了a brief introduction to tracing on the Erlang VM (in Elixir syntax),而Erlang资深人士之一Mats Cronqvist在其2014年Erlang用户大会的演讲Taking the printf out of printf debugging中详细阐述了这个主题。

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

  • dbg-标准OTP接口-this SO post shows its basics-在生产中进行跟踪时要小心,因为dbg不提供任何安全机制,所以有可能使生产系统超载,

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