调试node.js中的无限循环

时间:2011-09-05 07:21:22

标签: node.js

我的node.js程序中似乎有一个无限循环。 CPU上升到99.9%,服务器冻结。

当服务器冻结然后检查调用堆栈以查看导致此问题的函数时,有没有办法打破?

3 个答案:

答案 0 :(得分:4)

所以,我想出了一个解决方案。

我在调试模式下安装了node-inspector(很棒的工作BTW)和编译节点。 不要忘记激活它:node-inspector &将在后台运行它。

之后我用V8的调试标志启动了节点进程:

node --debug script.js

棘手的部分是重新出现无限循环,但是在20分钟左右之后,我幸运地完成了它。 我使用检查器的界面暂停程序(右侧的暂停按钮),然后检查堆栈当前的位置。有时暂停将在本机代码中发生,但您可以暂停并恢复它,直到您返回JavaScript。

成功:)

答案 1 :(得分:1)

如果node-inspector由于某种原因(不适合我)不适合您,但您可以轻松重现该错误,请尝试运行node --prof script,等待它冻结然后再几分钟,然后只需运行node-tick-processor,看看哪个函数的刻度最多。

答案 2 :(得分:0)

不,我不认为这是可能的。当然,您可以添加断点,但必须将它们放在您怀疑无限循环运行位置的位置...之后,您可以手动检查发生了什么。此外,您可以添加一些代码行,这些代码在屏幕上写入内容,或者在文本文件到达行时添加。如果你看到一些重复的线条,你知道在哪里看。