Weiß jemand, wie man einen Stack-Trace in Node.js druckt?
javascript
node.js
stack-trace
mike.toString
quelle
quelle
sys.puts(new Error().stack)
(nach dem Hinzufügen des Systemmoduls)'util'
.new Error().stack
, was in Fällen funktioniert, in denen Sie die Konsole nicht einbeziehen möchten.trace
ist, dass es auch die aktuelle Zeile / den aktuellen Kontext anzeigt, wasstack
nicht der Fall ist. Die Informationen befinden sich im Fehlerobjekt, wenn Sie diese Zeile manuell erstellen möchten.Jetzt gibt es eine spezielle Funktion auf der Konsole dafür:
quelle
console.trace()
.--stack_trace_limit=200
Wie bereits beantwortet, können Sie einfach den Befehl trace verwenden :
Allerdings , wenn Sie auf diese Frage kommen Benutzer darüber , wie der Stack - Trace einer Ausnahme zu protokollieren , können Sie einfach das Exception - Objekt anmelden.
Es wird protokolliert:
Wenn Ihre Node.js-Version <als 6.0.0 ist , reicht die Protokollierung des Exception-Objekts nicht aus. In diesem Fall wird nur gedruckt:
Verwenden Sie für die Knotenversion <6
console.error(e.stack)
anstelle vonconsole.error(e)
, um die Fehlermeldung plus den vollständigen Stapel zu drucken, wie dies bei der aktuellen Knotenversion der Fall ist.Hinweis: Wenn die Ausnahme wie eine Zeichenfolge erstellt wird
throw "myException"
, ist es nicht möglich, die Stapelverfolgung abzurufen, und die Protokollierunge.stack
liefert undefinierte Ergebnisse .Um sicher zu gehen, können Sie verwenden
und es wird für alte und neue Node.js-Versionen funktionieren.
quelle
console.error(e)
drucken alles ime
Objekt, einschließliche.stack
?So drucken Sie die Stapelverfolgung
Error
in der Konsole besser lesbar:Beispielergebnis:
quelle
Mit einem sofort verfügbaren Node-Modul ist es möglich, Stack-Traces in voller Länge aus Node herauszuholen (allerdings mit einem geringen Leistungsverlust): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack -traces-for-node-js
quelle
Versuchen Sie Error.captureStackTrace (targetObject [, constructorOpt]) .
Die Funktion
a
undb
werden im Fehlerstapel erfasst und in gespeichertmyObj
.quelle
stack
Eigenschaft haben soll, müssen Sie dies aufrufen, wenn Node> = 6 :Error.captureStackTrace(error)
.Error.captureStackTrace
im Stack-Trace angezeigt wird, können Sie ihn weglassen, indem Sie ihn alsconstructorOpt
Argument übergeben.Soweit ich weiß, ist das Drucken des vollständigen Stack-Trace in NodeJS nicht möglich. Sie können einfach einen "partiellen" Stack-Trace drucken. Sie können nicht sehen, woher Sie im Code stammen und wo die Ausnahme auftritt. Das erklärt Ryan Dahl in diesem Youtube-Video. http://youtu.be/jo_B4LTHi3I um mindestens 56:30 Uhr, um genau zu sein. Hoffe das hilft
quelle
Die Antwort von @isaacs ist korrekt, aber wenn Sie einen spezifischeren oder saubereren Fehlerstapel benötigen , können Sie diese Funktion verwenden:
Diese Funktion ist direkt von der
console.trace
Funktion in inspiriert NodeJS .Quellcode: Aktuelle Version oder alte Version .
quelle
err.stack
ist die richtige Antwort.Wenn Sie nur den Stack-Trace des Fehlers (und nicht die Fehlermeldung) protokollieren möchten, enthält Knoten 6 und höher automatisch den Fehlernamen und die Meldung im Stack-Trace. Dies ist etwas ärgerlich, wenn Sie eine benutzerdefinierte Fehlerbehandlung durchführen möchten:
console.log(error.stack.replace(error.message, ''))
Bei dieser Problemumgehung werden nur der Fehlername und die Stapelverfolgung protokolliert (so können Sie beispielsweise die Fehlermeldung formatieren und an einer anderen Stelle in Ihrem Code anzeigen, wie Sie möchten).
Das obige Beispiel würde nur den Fehlernamen drucken, dem die Stapelverfolgung folgt, zum Beispiel:
Anstatt:
quelle
Falls jemand immer noch so sucht wie ich, dann gibt es ein Modul namens "Stack-Trace". Es ist sehr beliebt. NPM Link
Dann gehen Sie durch die Spur.
Oder drucken Sie einfach die Spur aus:
quelle
Sie können das Node-Stack-Trace- Modul verwenden, bei dem es sich um ein Power-Full-Modul handelt, um Anrufstapel zu verfolgen.
quelle