有没有办法在node.js堆栈错误中获得超过10行?
function a() { dieInHell(); }
function b() { a(); }
function c() { b(); }
function d() { c(); }
function e() { d(); }
function f() { e(); }
function g() { f(); }
function h() { g(); }
function i() { h(); }
function j() { i(); }
function k() { j(); }
function l() { k(); }
function m() { l(); }
function n() { m(); }
function o() { n(); }
function p() { o(); }
function q() { p(); }
try {
q();
}
catch(e) {
console.log(e.stack);
}
显示:
$ node debug.js
ReferenceError: dieInHell is not defined
at a (/Users/julien/tmp/debug.js:2:5)
at b (/Users/julien/tmp/debug.js:6:5)
at c (/Users/julien/tmp/debug.js:10:5)
at d (/Users/julien/tmp/debug.js:14:5)
at e (/Users/julien/tmp/debug.js:18:5)
at f (/Users/julien/tmp/debug.js:22:5)
at g (/Users/julien/tmp/debug.js:26:5)
at h (/Users/julien/tmp/debug.js:30:5)
at i (/Users/julien/tmp/debug.js:34:5)
at j (/Users/julien/tmp/debug.js:38:5)
有没有办法获得超过10个电话?
答案 0 :(得分:115)
最简单的解决方案是使用以下代码启动代码:
Error.stackTraceLimit = Infinity;
如果您希望看到跨越setTimeout / setInterval调用的堆栈跟踪,那么更复杂的https://github.com/mattinsler/longjohn将成为可能。
答案 1 :(得分:51)
您可以将堆栈跟踪限制作为命令行参数传递给node
:
node --stack-trace-limit=1000 debug.js
//默认为10
RangeError
没有任何其他信息),则可能会出现非常无法提供的错误。 您可以使用:增加堆栈大小
node --stack-size=1024 debug.js
//默认492
在回调 - 回调 - 回调链接的世界中,实际上很容易超出大输入大小的堆栈大小,如果程序没有记在这一点。
要查看所有与堆栈相关的选项:
node --v8-options | grep -B0 -A1 stack
答案 2 :(得分:5)
答案 3 :(得分:2)
您可以在 NODE_OPTIONS
变量中设置跟踪限制:
$ NODE_OPTIONS=--stack-trace-limit=100 node debug.js
ReferenceError: dieInHell is not defined
at a (/tmp/debug.js:1:16)
at b (/tmp/debug.js:2:16)
at c (/tmp/debug.js:3:16)
at d (/tmp/debug.js:4:16)
at e (/tmp/debug.js:5:16)
at f (/tmp/debug.js:6:16)
at g (/tmp/debug.js:7:16)
at h (/tmp/debug.js:8:16)
at i (/tmp/debug.js:9:16)
at j (/tmp/debug.js:10:16)
at k (/tmp/debug.js:11:16)
at l (/tmp/debug.js:12:16)
at m (/tmp/debug.js:13:16)
at n (/tmp/debug.js:14:16)
at o (/tmp/debug.js:15:16)
at p (/tmp/debug.js:16:16)
at q (/tmp/debug.js:17:16)
at Object.<anonymous> (/tmp/debug.js:20:5)
at Module._compile (node:internal/modules/cjs/loader:1108:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10)
at Module.load (node:internal/modules/cjs/loader:973:32)
at Function.Module._load (node:internal/modules/cjs/loader:813:14)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
at node:internal/main/run_main_module:17:47
答案 4 :(得分:0)
此外,您还可以使用built-in debugger打开熟悉的Google Chrome浏览器开发工具调试器。它会在任何错误时停止,您可以浏览整个堆栈。跑吧:
$ node --inspect debug.js
Debugger listening on port 9229.
To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...