node.js堆栈错误超过10行?

Jul*_*oux 87 stack-trace node.js

有没有办法在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);
}
Run Code Online (Sandbox Code Playgroud)

显示:

$ 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)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得超过10个电话?

Mar*_*wak 127

最简单的解决方案是使用以下代码启动代码:

Error.stackTraceLimit = Infinity;
Run Code Online (Sandbox Code Playgroud)

如果您希望看到跨越setTimeout/setInterval调用的堆栈跟踪,那么更复杂的https://github.com/mattinsler/longjohn将是您的选择.

  • 我上次尝试时,Error.stackTraceLimit没有为我做这件事. (2认同)

jak*_*b.g 56

您可以将堆栈跟踪限制作为命令行参数传递给node:

node --stack-trace-limit=1000 debug.js //默认10

BTW,听起来不太可能发生的另一件事,但是浪费了几个小时的调试时间,就是堆栈大小(默认为492 kB).如果堆栈耗尽(RangeError没有任何其他信息),您可能会遇到非常无法提供的错误.您可以使用以下命令增加堆栈大小:

node --stack-size=1024 debug.js //默认492

在回调 - 回调 - 回调链接的世界中,如果程序没有记在这里,实际上很容易超过大输入大小的堆栈大小.

要查看所有与堆栈相关的选项:

node --v8-options | grep -B0 -A1 stack

  • 从 Node.js v8.0.0 开始,您还可以在 `NODE_OPTIONS` 环境变量中设置它,例如 `NODE_OPTIONS='--stack-trace-limit=10000' /path/to/some-script`。如果您不直接调用 `node`,则很有用。 (5认同)
  • --stack-trace-limit仍然在0.10.22工作,谢谢! (3认同)

rad*_*row 12

您可以在变量中设置跟踪限制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
Run Code Online (Sandbox Code Playgroud)


3rd*_*den 5

使用https://github.com/tlrobinson/long-stack-traces模块.

  • 让我们希望Node.js最终默认集成它! (3认同)