我和我的同事写了一个node.js应用程序。我被指派本周调试一个问题。问题是应用程序每隔几天崩溃就会出现此错误:
events.js:0
(function (exports, require, module, __filename, __dirname) { // Copyright Joy
^
RangeError: Maximum call stack size exceeded
不幸的是,它不会打印任何其他内容。
我可以将哪些node.js方法和工具用于node.js来调试此问题?我们的应用程序非常庞大(它为整个校园文档查找器提供支持),因此我们不知道这个错误发生在哪里(源代码文件很多)。
答案 0 :(得分:3)
根据你的描述(它可能会每隔几天崩溃一次 - 可能是在相同的时间之后),听起来可能有一个线程的堆栈随着时间的推移通过递归而增长。为了看到这一点,我等了一天左右,然后使用ProcDump强制实际执行javascript的任何容器应用程序的核心转储。以WinDbg之类的方式打开核心文件,并查找具有可疑数量的堆栈帧的线程 - 这可以解决您的问题。
答案 1 :(得分:1)
如果您没有工具,请创建一个。你应该按值计算函数调用,我的意思是你应该在函数中插入这样的东西:
function(...) {
callCounter[module]++;
console.log("module:",module,"count:",callCounter[module]);
...
callCounter[module]--;
} // fn()
是的,它会泛滥屏幕,(编辑:),这样你就可以捕获它。 (这半句话以某种方式消失了,几天后重新加入。)