我的node.js程序中似乎有一个无限循环。 CPU上升到99.9%,服务器冻结。
当服务器冻结然后检查调用堆栈以查看导致此问题的函数时,有没有办法打破?
答案 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)
不,我不认为这是可能的。当然,您可以添加断点,但必须将它们放在您怀疑无限循环运行位置的位置...之后,您可以手动检查发生了什么。此外,您可以添加一些代码行,这些代码在屏幕上写入内容,或者在文本文件到达行时添加。如果你看到一些重复的线条,你知道在哪里看。