Weiß jemand, wie man einen Stack-Trace in Node.js drucken?
Oder einfach sys.puts(new Error().stack)
(nach Hinzufügen des Systemmoduls)
Weiß jemand, wie man einen Stack-Trace in Node.js drucken?
+1 auch für die Anzeige new Error().stack
Dies funktioniert in Fällen, in denen Sie die Konsole nicht einbeziehen wollen.
Jetzt gibt es eine spezielle Funktion auf der Konsole dafür:
console.trace()
Standardmäßig werden nur 10 Bilder angezeigt. Mit dem Befehlszeilenargument können Sie diese Zahl erhöhen, z. B. --stack_trace_limit=200
Wie bereits beantwortet, können Sie einfach die Spur Befehl:
console.trace("I am here");
Allerdings, wenn Sie auf diese Frage gekommen sind, weil Sie wissen wollten, wie man den Stack-Trace einer Ausnahme protokolliert können Sie einfach das Exception-Objekt protokollieren.
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
Es wird protokolliert:
Fehler: Es ist etwas Unerwartetes passiert.
bei main (c: \Users\Me\Documents\MyApp\app.js :9:15)
bei Object. (c: \Users\Me\Documents\MyApp\app.js :17:1)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
beim Starten (node.js:129:16)
bei node.js:814:3
Wenn Ihre Node.js-Version kleiner als 6.0.0 ist ist die Protokollierung des Exception-Objekts nicht ausreichend. In diesem Fall wird es nur gedruckt:
[Fehler: Es ist etwas Unerwartetes passiert].
Für Node Version < 6, verwenden Sie console.error(e.stack)
代わりに console.error(e)
um die Fehlermeldung und den vollständigen Stack auszugeben, wie es die aktuelle Node-Version tut.
Anmerkung: wenn die Ausnahme als Zeichenkette erstellt wird wie throw "myException"
ist es nicht möglich, den Stack-Trace und die Protokollierung abzurufen e.stack
ergibt undefiniert .
Um sicher zu gehen, können Sie Folgendes verwenden
console.error(e.stack || e);
und es wird für alte und neue Node.js-Versionen funktionieren.
@drmrbrewer, vielen Dank für diesen Hinweis. Es scheint, dass sich das Verhalten zwischen den Node-Versionen 4.x und 7.x geändert hat (wahrscheinlich eine V8-Änderung). Ich habe meine Antwort aktualisiert.
So drucken Sie den Stacktrace von Error
in der Konsole in besser lesbarer Form:
console.log(ex, ex.stack.split("\n"));
Beispielhaftes Ergebnis:
[Error] [ 'Error',
' at repl:1:7',
' at REPLServer.self.eval (repl.js:110:21)',
' at Interface.<anonymous> (repl.js:239:12)',
' at Interface.EventEmitter.emit (events.js:95:17)',
' at Interface._onLine (readline.js:202:10)',
' at Interface._line (readline.js:531:8)',
' at Interface._ttyWrite (readline.js:760:14)',
' at ReadStream.onkeypress (readline.js:99:10)',
' at ReadStream.EventEmitter.emit (events.js:98:17)',
' at emitKey (readline.js:1095:12)' ]
@isaacs Antwort ist richtig, aber wenn Sie spezifischere oder sauberere Fehlerstapel können Sie diese Funktion verwenden:
function getCleanerStack() {
var err = new Error();
Error.captureStackTrace(err, getStack);
return err.stack;
}
Diese Funktion ist direkt von der console.trace
Funktion in NodeJS .
Quellcode: Neueste Version ou Alte Fassung .
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.