我有一个服务器,我可以通过以下输出导致死机:
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/