代码之家  ›  专栏  ›  技术社区  ›  Shubham1164

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

  •  0
  • Shubham1164  · 技术社区  · 6 年前

    我正在使用Mac OS 10.14和Mongooseim。我想在Mongooseim中使用调试器。当我执行时 () 在Mongooseim Shell中,我得到以下错误:

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

    我可以确认我可以运行 () 在二郎壳里 $EL . 似乎我必须在Mongooseim中启用调试器,但我不知道如何做到这一点。我在Erlang/EJaberd/Mongooseim文档中找不到它。我还阅读了与此相关的以下内容:

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   erszcz    6 年前

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

    由于erlang虚拟机的特性,其中许多并发活动并行发生,因此逐步调试程序不是该作业的最佳工具。例如,在通过调用的进程中设置断点 gen_server:call() 会使调用超时,导致一连串错误,这些错误可能与正在调试的问题无关。

    但是,ErlangVM有一个更适合其并发性的内置调试工具-A 跟踪调试器 . 跟踪不允许断点或暂停执行。相反,它记录(所有事件的子集)精确的事件 在系统中发生并打印/保存它们以供后期检查。

    这段视频和文字记录提供了 a brief introduction to tracing on the Erlang VM (in Elixir syntax) ,而Mats Cronqvist,其中一位Erlang退伍军人,在他2014年的Erlang用户会议上详细阐述了这个问题。 Taking the printf out of printf debugging .

    也就是说,Mongooseim提供了两个跟踪机制接口:

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

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