调试"超出最大调用堆栈大小"

Sto*_*ica 24 javascript debugging v8 node.js

我有一个服务器,我可以导致死亡与以下输出:

events.js:38
EventEmitter.prototype.emit = function(type) {
                                  ^
RangeError: Maximum call stack size exceeded
Run Code Online (Sandbox Code Playgroud)

但是,如果没有堆栈转储或跟踪,我无法找到这是无限递归还是只是一个稍微过大的链,更不用说问题函数的位置了.

使用该--trace选项运行节点导致我的测试不仅运行缓慢(正如人们所期望的那样),而且不能重现问题.

任何人都有任何解决方案或提示,以了解到这一点?

met*_*att 9

目前答案似乎是:坐稳并等待Node.js更新到更新的V8版本,或使用此Chromium项目错误报告中的补丁构建您自己的版本.

来自v8-dev邮件列表的这个存档线程显示了一个讨论

  • 戴夫史密斯提出了这个问题并提出了补丁
  • Chromium项目的Yang Guo讨论了它,针对该问题提交了Chromium bug,并应用了不同的修复方法
  • Dave注意到Node(当时为0.8)正在使用V8 3.11并询问有关向后移植补丁的问题.杨回答说补丁可能会落在V8 3.15中,不会被移植.

注意Node.js v0.8使用了V8 3.11; Node.js 0.10目前正在使用V8 3.14.因此,就Node而言,Chromium接受的补丁仍然是"未来".

(这个答案归功于@Coderoshi,因为它是通过跟随他回答的线索而得知的.)