Kann jemand einen Stack-Trace in Node.js drucken?Wie wird ein Stack-Trace in Node.js gedruckt?
Antwort
Jedes Error
Objekt verfügt über ein stack
Element, das den Punkt abfängt, an dem es erstellt wurde.
var stack = new Error().stack
console.log(stack)
oder einfacher:
console.trace("Here I am!")
Jetzt gibt es eine dedicated function on console dafür:
console.trace()
Achte nur darauf, [den obigen Kommentar] (http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-nodejs#comment21085596_2932410) über 'console.trace()' zu beachten . – Qix
Standardmäßig werden nur 10 Frames angezeigt. Sie können das Befehlszeilenargument verwenden, um das zu erhöhen, z. '--stack_trace_limit = 200' – Michael
Für das, was ich weiß, das Drucken der komplette Stack-Trace in NodeJS nicht möglich ist, können Sie einfach Drucken Sie eine "teilweise" Stack-Trace, Sie können nicht sehen, woher Sie im Code kamen, nur wo die Ausnahme auftreten. Das erklärt Ryan Dahl in diesem Youtube-Video. http://youtu.be/jo_B4LTHi3I bei min 56:30 für genau zu sein. Hope this
wahr, aber das Modul in @ Timboudreau Antwort "behebt", dass –
Mit einem leicht zugänglichen Knotenmodul hilft, ist es möglich, in voller Länge Stack-Traces aus Knoten zu erhalten (wenn auch mit einer geringeren Leistungseinbuße): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-node-js
Link tot, aber man kann die [archivierte Kopie hier] (https://web.archive.org/web/20160309113159/http : //www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-nodejs) oder [Bibliothek] (https://github.com/mattinsler/longjohn). –
Um stacktrace von Error
in der Konsole in mehr zu drucken lesbare Weise:
console.log(ex, ex.stack.split("\n"));
Beispiel 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)' ]
Wie bereits beantwortet, können Sie einfach der trace Befehl:
console.trace("I am here");
jedoch , wenn Sie auf diese Frage kommen Benutzer darüber, wie der Stack-Trace einer Ausnahme anmelden, können Sie einfach das Exception-Objekt anmelden.
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
Es wird log:
Error: Something unexpected has occurred.
at main (c:\Users\Me\Documents\MyApp\app.js:9:15)
at 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)
at startup (node.js:129:16)
at node.js:814:3
Wenn Ihr Node.js Version < als 6.0.0, Protokollierung der Exception-Objekt sein wird, ist nicht genug. In diesem Fall druckt es nur:
[Error: Something unexpected has occurred.]
Für Node-Version < 6, verwenden console.error(e.stack)
statt console.error(e)
die Fehlermeldung und den vollständigen Stapel zu drucken, wie der aktuelle Knoten Version der Fall ist.
Hinweis:, wenn die Ausnahme als String wie throw "myException"
erstellt wird, ist es nicht möglich, den Stack-Trace abrufen und e.stack
ergibt Protokollierung undefined.
Um sicher zu sein, Sie
console.error(e.stack || e);
und es wird funktionieren für alte und neue Node.js Möglichkeiten nutzen.
Wird 'console.error (e)' nicht * alles * im 'e' Objekt drucken, einschließlich' e.stack'? – drmrbrewer
@drmrbrewer, vielen Dank, dass Sie darauf hingewiesen haben. Es scheint, dass sich das Verhalten zwischen den Knotenversionen 4.x und 7.x geändert hat (vermutlich eine V8-Änderung). Ich habe meine Antwort aktualisiert. – Zanon
@drmrbrewer hat bestätigt, dass sich dieses Verhalten in Version 6.0.0 geändert hat – Zanon
können Sie node-stack-trace Modul verwenden, das ein Power-Modul zum Verfolgen von Call-Stacks ist.
Wenn Sie nur den Stack-Trace des Fehlers protokollieren möchten (und nicht die Fehlermeldung), fügt Knoten 6 und höher automatisch den Fehlernamen und die Nachricht in den Stack-Trace ein. Das ist ein bisschen ärgerlich, wenn Sie etwas tun wollen benutzerdefinierte Fehlerbehandlung:
console.log(error.stack.replace(error.message, ''))
Diese Problemumgehung wird nur protokolliert die Fehlernamen und Stack-Trace (so können Sie zum Beispiel, formatieren Sie die Fehlermeldung und es zeigt, wie Sie woanders in Ihrem Code wollen).
Das obige Beispiel würde nur der Fehlername folgt durch den Stack-Trace, zum Beispiel drucken:
Error:
at /Users/cfisher/Git/squashed/execProcess.js:6:17
at ChildProcess.exithandler (child_process.js:213:5)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:877:16)
at Socket.<anonymous> (internal/child_process.js:334:11)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at Pipe._handle.close [as _onclose] (net.js:498:12)
Statt:
Error: Error: Command failed: sh ./commands/getBranchCommitCount.sh HEAD
git: 'rev-lists' is not a git command. See 'git --help'.
Did you mean this?
rev-list
at /Users/cfisher/Git/squashed/execProcess.js:6:17
at ChildProcess.exithandler (child_process.js:213:5)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:877:16)
at Socket.<anonymous> (internal/child_process.js:334:11)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at Pipe._handle.close [as _onclose] (net.js:498:12)
Versuchen Error.captureStackTrace(targetObject[, constructorOpt]).
const myObj = {};
function c() {
// pass
}
function b() {
Error.captureStackTrace(myObj)
c()
}
function a() {
b()
}
a()
console.log(myObj.stack)
Die Funktion a
und b
werden in Fehlerstack gespeichert und in myObj
erfasst.
- 1. Wie wird ein Zeilenumbruch in Java gedruckt?
- 2. Wie wird ein Wörterbuch mit Funktionsnamen gedruckt?
- 3. Wie kann ich log4j so konfigurieren, dass das Exception-Stacktrace nicht gedruckt wird?
- 4. Wie wird die vollständige Stapelverfolgung in Ausnahmefällen gedruckt?
- 5. was kann dazu führen, dass node.js gedruckt und beendet wird?
- 6. Wie wird ein Guint64-Wert gedruckt, wenn glib verwendet wird?
- 7. Wie wird mehrseitiges WPF gedruckt?
- 8. Wie wird ein einzelnes Array-Element in Objective-C gedruckt?
- 9. Wie wird ein JTable-Header in zwei Zeilen gedruckt?
- 10. Wie wird ein Zeilenumbruch in einem MS-DOS-Skript gedruckt?
- 11. Wie wird ein Unicode-Zeichencode in Python gedruckt?
- 12. Wie wird ein neues Zeilenzeichen in LC-3 gedruckt?
- 13. Instanzvariablenwert wird nicht gedruckt
- 14. Wie wird ein Formular automatisch gedruckt, wenn ein neues Exemplar in einer SharePoint-Liste veröffentlicht wird?
- 15. Wie wird eine Variable gedruckt, die ein Unicode-Zeichen enthält?
- 16. Wie wird ein Pfund/Hash über C-Präprozessor gedruckt?
- 17. Wie wird ein Leerraumzeichen mit einer Stringvariablen gedruckt?
- 18. Wie wird '\ n' anstelle eines Zeilenumbaus gedruckt?
- 19. Wie interpretieren Go stacktrace
- 20. Wie Javascript stacktrace generieren?
- 21. C++ Wie wird eine Zeichenfolge rückwärts gedruckt?
- 22. Zend_Test_PHPUnit Wie wird die Ausnahme/Ausgabe gedruckt?
- 23. warum wird die Eigenschaftendatei nicht gedruckt?
- 24. Wie wird eine Teilstapelspur mit Log4perl gedruckt?
- 25. console.log wird nicht undefiniert gedruckt?
- 26. Std :: Cout wird nicht gedruckt
- 27. Die Logdatei wird nicht gedruckt
- 28. In einer .net Exception, wie ein Stacktrace mit Argument Werten
- 29. Array wird nicht vollständig gedruckt
- 30. Warum wird dieser Code gedruckt?
oder einfach 'sys.puts (new Error(). Stack)' (nach dem Hinzufügen des Systemmoduls) – sirhc
Ab sofort ist sys entzogen. Es wird durch "util" ersetzt. – Pindatjuh
+1 für die Anzeige von 'new Error() .stack', was in Fällen funktioniert, in denen Sie die Konsole nicht einbeziehen möchten. –