javascript - 调试 "Maximum call stack size exceeded"

标签 javascript node.js debugging v8

我有一个服务器,我可以通过以下输出导致死机:

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

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

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

任何人有任何解决方案或提示可以解决这个问题吗?

最佳答案

目前的答案似乎是:坐等 Node.js 更新到更新的 V8 版本,或者使用 the patch from this Chromium project bug report 构建自己的.

This archived thread from the v8-dev mailing list显示了一个讨论,其中

  • 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 接受的针对此问题的补丁仍然是“ future 的”。

(这个答案要感谢@Coderoshi,因为我是从他的回答中了解到这一切的。)

关于javascript - 调试 "Maximum call stack size exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663957/

相关文章:

Javascript删除html表格行

node.js - Express 3.4.8 图片上传问题 - 不使用bodyParser()如何解决?

javascript - 如何在 puppeteer 中获取所有 xhr 调用?

c - 调试方法

javascript - $(this) 定义函数时的问题

javascript - 字符串结尾的 RegEx 测试?

javascript - karma : Continuous Integration mode shuts down browser

javascript - 发件人未收到 socker.io 上发送的消息

debugging - SSL 握手调试不再适用于 Apache Tomcat/9.0.0.M22

debugging - 如何在 CFBuilder 中实际配置调试