调试“超出最大调用堆栈大小”
我有一台服务器,可能导致以下输出死亡:
events.js:38EventEmitter.prototype.emit = function(type) {
^
RangeError: Maximum call stack size exceeded
但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。
使用该--trace
选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。
有人有任何解决方案或提示来深入了解此问题吗?
回答:
看来目前的答案是:站稳脚步,等待Node.js更新到新的V8版本,或者使用此Chromium项目错误报告中的补丁构建自己的补丁。
来自v8-dev邮件列表的此归档线程显示了一个讨论,其中
- Dave Smith提出了这个问题并提出了一个补丁
- Chromium项目的Yang Guo对此进行了讨论,针对此问题提交了Chromium错误,并应用了其他修复程序
- Dave注意到Node(当时为0.8)正在使用V8 3.11,并询问有关向后移植补丁的信息。Yang回答说,该补丁可能会在V8 3.15中着陆,并且不会被反向移植。
请注意,Node.js v0.8使用的是V8 3.11;Node.js 0.10当前正在使用V8
3.14。因此,就Node而言,Chromium接受的针对此问题的补丁仍在“将来”。
(这个答案归功于@Coderoshi,因为这是我从他的答案中得到的线索,我才学到了这一切。)
以上是 调试“超出最大调用堆栈大小” 的全部内容, 来源链接: utcz.com/qa/409388.html