一尘不染

调试“超出最大调用堆栈大小”

node.js

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

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

但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。

使用该--trace选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。

有人有任何解决方案或提示来深入了解此问题吗?


阅读 408

收藏
2020-07-07

共1个答案

一尘不染

看来目前的答案是:站稳脚步,等待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,因为这是我从他的答案中得到的线索,我才学到了这一切。)

2020-07-07