如何在node.js中调试`RangeError:超出最大调用堆栈大小`错误

时间:2014-10-19 06:42:42

标签: node.js stack-overflow stack-trace

我和我的同事写了一个node.js应用程序。我被指派本周调试一个问题。问题是应用程序每隔几天崩溃就会出现此错误:

events.js:0
(function (exports, require, module, __filename, __dirname) { // Copyright Joy
^
RangeError: Maximum call stack size exceeded

不幸的是,它不会打印任何其他内容。

我可以将哪些node.js方法和工具用于node.js来调试此问题?我们的应用程序非常庞大(它为整个校园文档查找器提供支持),因此我们不知道这个错误发生在哪里(源代码文件很多)。

2 个答案:

答案 0 :(得分:3)

根据你的描述(它可能会每隔几天崩溃一次 - 可能是在相同的时间之后),听起来可能有一个线程的堆栈随着时间的推移通过递归而增长。为了看到这一点,我等了一天左右,然后使用ProcDump强制实际执行javascript的任何容器应用程序的核心转储。以WinDbg之类的方式打开核心文件,并查找具有可疑数量的堆栈帧的线程 - 这可以解决您的问题。

答案 1 :(得分:1)

如果您没有工具,请创建一个。你应该按值计算函数调用,我的意思是你应该在函数中插入这样的东西:

function(...) {
  callCounter[module]++;
  console.log("module:",module,"count:",callCounter[module]);
    ...
  callCounter[module]--;
} // fn()

是的,它会泛滥屏幕,(编辑:),这样你就可以捕获它。 (这半句话以某种方式消失了,几天后重新加入。)