【问题标题】:Debugging a function call that hangs in Erlang调试挂在 Erlang 中的函数调用
【发布时间】:2014-02-17 12:57:46
【问题描述】:

似乎我在我的代码或我正在使用的代码中的某个地方导致了死锁,但我不确定如何调试它。由于我不知道问题出在哪里,并且我可以使系统几乎完全空闲,我认为查看导致挂起的所有功能和消息的跟踪会很有用。看起来dbg 在跟踪方面提供了一些帮助,但我不知道如何为如此广泛的跟踪配置它。 dbg 是否可以进行这样的跟踪,或者在 Erlang 中是否有其他更好的调试挂起方法?

【问题讨论】:

  • 您正在开发什么样的应用程序?它在挂起之前在做什么?你有一些示例代码吗?
  • 当我调用 application:stop/1 时,挂起发生在基于牛仔的应用程序中。我正在讨论是否发布更多代码,但我希望得到一个关于人们如何调试这些问题的更通用的答案,而不是针对我当前问题的具体解决方案。

标签: debugging erlang freeze


【解决方案1】:

你试过Erlang Debugger吗?

【讨论】:

  • 我试过了,但我的设置似乎并不适合它。我的代码在远程节点上运行,我无法在该节点上本地运行调试器。我可能只需要深入研究文档,因为在 Erlang 中似乎可以在远程节点上使用调试器。我会在完成 dbg 推荐后尝试。
【解决方案2】:

我建议使用dbg。虽然在另一个答案中提到了一个传统的调试器,但它对并发程序的用处非常有限,因为它通常会导致大量超时。

为了克服使用dbg 的障碍,我推荐以下资源:

All answers are interesting here but especially the user_default in the linked one helps also

Example what can be done by handling the trace messages yourself 在难以调试的情况下很有用。

Continuously updated links and nodes about Erlangs dbg

如果您需要在生产环境中使用dbg,我建议您使用redbug,它可以帮助您避免节点崩溃。 Blogpost about using redbug

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 2013-02-26
    • 2016-05-18
    • 2013-02-01
    • 2016-03-30
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多