我的项目被冻结的情况。 我看到只有100%使用其中一个CPU(其余的是0%,但我使用的是SMP)。
我的管理控制台说:
=ERROR REPORT==== 11-Feb-2011::00:45:00 ===
** Node 'node@example.com' not responding **
** Removing (timedout) connection **
之后我无法连接到节点。
如果我使用C ++进行编程,我可以进行调试构建,当发生这种情况时,我可以附加到我的进程并查看它循环的代码。
但我怎么能在Erlang中做到这一点?我如何获得调用堆栈或其他东西来帮助我理解错误的原因?
感谢您的帮助。
答案 0 :(得分:6)
您可以在命令行中使用调试信息编译模块:
$ erlc +debug_info module.erl
或者在Erlang shell中:
1> c(module, debug_info).
ok
当您已经开始流程时,您可以选择附加到工作流程。在erlang shell中启动调试器:
2> debugger:start().
将出现调试器窗口。从菜单中选择模块 - >解释并在“解释对话框”窗口中选择要附加到的相应模块。执行此操作后,您将在调试器的右侧窗口中看到您的模块。
现在选择处理 - >附加,应显示附加处理窗口。
答案 1 :(得分:1)
如果erlang发行版已关闭,则无法使用任何远程调试,因为无法连接到节点。如果配置为启动,则必须在启动时连接到VM创建的管道。请参阅http://www.erlang.org/doc/man/run_erl.html了解如何操作。
您可能还想查看此主题,了解系统的行为方式:http://www.erlang.org/cgi-bin/ezmlm-cgi?4:mss:55859:201101:jconogbffcaogeijbdkl