Более 10 строк в ошибке node.js?
Есть ли способ получить более 10 строк в ошибке стека node.js?
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 вызовов?
Ответы
Ответ 1
Самое простое решение для этого - начать свой код со следующего:
Error.stackTraceLimit = Infinity;
Если вы хотите видеть трассировку стека, которая распространяется на вызовы setTimeout/setInterval, то более сложным https://github.com/mattinsler/longjohn будет способ перейти.
Ответ 2
Вы можете передать ограничение трассировки стека как параметр командной строки на node
:
node --stack-trace-limit=1000 debug.js
//default 10
Кстати, еще одна вещь, которая кажется маловероятной, но просто потраченная несколько часов на мое время для отладки, размер стека (по умолчанию - 492 кБ). У вас могут быть очень неинформативные ошибки, если стек исчерпан (RangeError
без дополнительной информации). Вы можете увеличить размер стека с помощью:
node --stack-size=1024 debug.js
//по умолчанию 492
В мире цепочек обратного вызова к обратному обратному вызову на самом деле очень легко превысить размер стека для больших размеров ввода, если программа не написана в этом.
Чтобы просмотреть все связанные с стеком параметры:
node --v8-options | grep -B0 -A1 stack
Ответ 3
Используйте модуль https://github.com/tlrobinson/long-stack-traces.
Ответ 4
Также вы можете использовать встроенный отладчик, который открывает привычный отладчик dev-tools от 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/...