Debugging 调试挂起在Erlang中的函数调用

Debugging 调试挂起在Erlang中的函数调用,debugging,erlang,freeze,Debugging,Erlang,Freeze,似乎我的代码或正在使用的代码中的某个地方出现了死锁,但我不确定如何调试它。由于我不知道问题出在哪里,而且我可以使系统几乎完全闲置,因此我认为查看导致挂起的所有函数和消息的跟踪是有用的。看起来dbg在跟踪方面提供了一些帮助,但我不知道如何为如此广泛的跟踪配置它。使用dbg可以进行这样的跟踪吗?或者Erlang中是否有其他更好的调试挂起的方法?您尝试过吗?我建议使用dbg。虽然有另一个答案中提到的传统调试器,但它对于并发程序的用处非常有限,因为它通常会导致大量超时 为了克服使用dbg的障碍,我推荐以

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

您尝试过吗?

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

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

这在难以调试的情况下非常有用


如果您需要在生产环境中使用
dbg
,我建议使用它来帮助您避免节点崩溃

您正在使用哪种应用程序?它挂起来之前在做什么?您有一些示例代码吗?当我调用application:stop/1时,挂起发生在基于牛仔的应用程序中。我在讨论是否发布更多的代码,但我希望得到人们如何调试这些问题的更一般的答案,而不是我当前问题的具体解决方案。我尝试了,但我的设置似乎并不适合。我的代码在远程节点上运行,无法在该节点上本地运行调试器。我可能只需要深入研究文档,因为在Erlang中似乎可以在远程节点上使用调试器。我会在完成dbg推荐后再尝试。