debuggingnode.js中的无限循环
我似乎在我的node.js程序中有一个无限循环。 CPU上升到99.9%,服务器冻结。
当服务器冻结时,有什么办法可以中断,然后检查调用栈来查看哪个函数导致了这个问题?
所以,我想出了一个解决scheme。
我安装了node-inspector
(一个很棒的工作),并在debugging模式下编译节点。 不要忘记激活它: node-inspector &
将在后台运行它。
之后,我用V8的debugging标志启动节点进程:
node --debug script.js
棘手的部分是得到无限循环重新出现,但20分钟左右后,我幸运了,它确实。 我使用检查员的界面来暂停程序(右侧的暂停button),然后检查堆栈当前的位置。 有时暂停会以本地代码的forms出现,但是您可以暂停并继续,直到返回到JavaScript。
成功:)
不,我不认为这是可能的。 当然,您可以添加断点,但是您必须将它们放置在怀疑无限循环正在运行的位置…之后,您可以手动检查发生了什么。 另外,你可以添加一些代码,写一些东西到屏幕或文本文件,因为它击中了行。 如果你看到一些重复的行,你知道在哪里看。
如果node-inspector
由于某种原因(对我来说不起作用)不能工作,但是您可以轻松地重现bug,请尝试运行node --prof script
,等到冻结,然后再等几分钟,然后只需运行node-tick-processor
并查看哪个函数具有最多的tick。