Gibt es eine Möglichkeit, mehr als 10 Zeilen in einem Node.js-Stack-Fehler abzurufen?
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);
}
zeigt an :
$ 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)
Gibt es eine Möglichkeit, mehr als 10 Anrufe zu erhalten?
node.js
stack-trace
Julien Genestoux
quelle
quelle
Antworten:
Die einfachste Lösung dafür besteht darin, den Code wie folgt zu starten:
Wenn Sie einen Stack-Trace sehen möchten, der sich über setTimeout / setInterval-Aufrufe erstreckt, ist anspruchsvollere https://github.com/mattinsler/longjohn der richtige Weg.
quelle
stackTraceLimit
. Außerdem betrifft es nur das, was Sie von dem bekommen,Error.stack
was ich sehen kann. Der eingebaute Debugger zeigt immer den vollen Stapel an (bt
Befehl).--inspect
oder dem--inpect-brk
Befehl ausführenSie können das Stack-Trace-Limit als Befehlszeilenparameter an übergeben
node
:node --stack-trace-limit=1000 debug.js
// Standard 10Übrigens, eine andere Sache, die unwahrscheinlich klingt, aber nur ein paar Stunden meiner Zeit für das Debuggen verschwendet hat, ist die Stapelgröße (standardmäßig 492 kB) . Sie können sehr uninformative Fehler haben, wenn der Stapel erschöpft ist (
RangeError
ohne zusätzliche Informationen). Sie können die Stapelgröße mit erhöhen :node --stack-size=1024 debug.js
// Standard 492In der Welt der Callback-to-Callback-to-Callback-Verkettungen ist es in der Tat sehr einfach, die Stapelgröße für große Eingabegrößen zu überschreiten, wenn das Programm nicht in diesem Sinne geschrieben ist.
So zeigen Sie alle stapelbezogenen Optionen an:
node --v8-options | grep -B0 -A1 stack
quelle
NODE_OPTIONS
Umgebungsvariablen festlegen , zNODE_OPTIONS='--stack-trace-limit=10000' /path/to/some-script
. Nützlich, wenn Sie nichtnode
direkt aufrufen .Verwenden Sie das Modul https://github.com/tlrobinson/long-stack-traces .
quelle
Sie können auch den integrierten Debugger verwenden , der den bekannten Debugger für Entwicklertools von Google Chrome öffnet. Es stoppt bei jedem Fehler und Sie können den gesamten Stapel durchsuchen. Renn einfach:
quelle