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。