调试node.js中的无限循环

调试node.js中的无限循环,node.js,Node.js,我的node.js程序中似乎有一个无限循环。CPU增加到99.9%,而服务器只是冻结 有没有办法在服务器冻结时中断,然后检查调用堆栈,看看是什么函数导致了这种情况?没有,我认为这是不可能的。当然,您可以添加断点,但必须将其放置在怀疑无限循环正在运行的位置……之后,您可以手动检查发生了什么。此外,您还可以添加一些代码行,以便在屏幕或文本文件中写入内容。如果你看到一些重复的句子,你知道该往哪里看。所以,我想出了一个解决办法 我在调试模式下安装了(非常棒的一件工作)并编译了节点。 不要忘记激活它:节点

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


有没有办法在服务器冻结时中断,然后检查调用堆栈,看看是什么函数导致了这种情况?

没有,我认为这是不可能的。当然,您可以添加断点,但必须将其放置在怀疑无限循环正在运行的位置……之后,您可以手动检查发生了什么。此外,您还可以添加一些代码行,以便在屏幕或文本文件中写入内容。如果你看到一些重复的句子,你知道该往哪里看。

所以,我想出了一个解决办法

我在调试模式下安装了(非常棒的一件工作)并编译了节点。 不要忘记激活它:
节点检查器&
将在后台运行它

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

节点--debug script.js

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


成功:)

如果
节点检查器因某种原因对您不起作用(对我不起作用),但您可以很容易地复制错误,请尝试运行
节点--prof脚本,等待它冻结,然后再等几分钟,然后运行
节点勾号处理器
,看看哪个函数的勾号最多。

否,我仍在寻找解决方案,一旦我解决了这个问题,就会更新。仅供参考,您可以使用
节点调试脚本
,它允许您通过命令行单步执行并设置断点:这是一个evetemitter,最终使用了它自己的事件。这很愚蠢,但考虑到代码基数,我也有类似的问题,有时只有Firefox(!)创建了一个无限请求循环,这是可以理解的。不会发生在任何其他浏览器上,仅发生在桌面设备上。相当混乱,但调试模式可能会有所帮助。