Qualcuno sa come stampare una traccia di stack in Node.js?Come stampare una traccia dello stack in Node.js?
risposta
Qualsiasi oggetto Error
ha un membro stack
che intercetta il punto in cui è stato costruito.
var stack = new Error().stack
console.log(stack)
o più semplicemente:
console.trace("Here I am!")
ora c'è un dedicated function on console per questo:
console.trace()
Assicurati di prestare attenzione [al commento precedente] (http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-nodejs#comment21085596_2932410) a proposito di 'console.trace()' . – Qix
Per impostazione predefinita, questo mostrerà solo 10 frame, è possibile utilizzare l'argomento della riga di comando per aumentare questo valore, ad es. '--stack_trace_limit = 200' – Michael
Per quello che so stampando la traccia completa dello stack in nodejs non è possibile, si può solo stampa una traccia di stack "parziale", non puoi vedere da dove vieni nel codice, proprio dove si verifica l'Eccezione. Questo è ciò che Ryan Dahl spiega in questo video di YouTube. http://youtu.be/jo_B4LTHi3I al minuto 56:30 per essere precisi. Spero che questo aiuti
true, ma il modulo nella risposta di @ Timboudreau "corregge" che –
Con un modulo Node prontamente disponibile, è possibile ottenere le tracce full-length pila di Node (anche se con una penalizzazione delle prestazioni minore): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-node-js
Link dead ma si può esaminare la [copia archiviata qui] (https://web.archive.org/web/20160309113159/http : //www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-nodejs) o controlla [la biblioteca] (https://github.com/mattinsler/longjohn). –
Per stampare stacktrace di Error
in consolle in più modo leggibile: risultato
console.log(ex, ex.stack.split("\n"));
Esempio:
[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)' ]
Come già risposto, si può semplicemente utilizzare il comando trace:
console.trace("I am here");
Tuttavia, se si è venuto a questa domanda la ricerca su come accedere alla stack trace di un'eccezione, si può semplicemente accedere l'oggetto eccezione.
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
Sarà 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
Se la versione Node.js è < di 6.0.0, la registrazione l'oggetto eccezione non sarà sufficiente. In questo caso, verrà stampata solo:
[Error: Something unexpected has occurred.]
per il nodo versione < 6, utilizzare console.error(e.stack)
invece di console.error(e)
per stampare il messaggio di errore più lo stack completo, come la versione nodo corrente fa.
Nota: se l'eccezione è creato come una stringa come throw "myException"
, non è possibile recuperare la traccia dello stack e la registrazione e.stack
produce indefinita.
Per essere sicuri, è possibile utilizzare
console.error(e.stack || e);
e si lavorerà per le versioni vecchie e nuove Node.JS.
'' console.error (e) 'non stamperà * tutto * nell'oggetto' e', incluso 'e.stack'? – drmrbrewer
@drmrbrewer, grazie per averlo indicato. Sembra che il comportamento sia cambiato tra le versioni Node 4.xe 7.x (probabilmente una modifica V8). Ho aggiornato la mia risposta. – Zanon
@drmrbrewer ha confermato che questo comportamento è cambiato nella versione 6.0.0 – Zanon
è possibile utilizzare il modulo node-stack-trace che è un modulo di alimentazione completo per il monitoraggio delle pile di chiamate.
Se si desidera registrare solo la traccia di stack dell'errore (e non il messaggio di errore) il nodo 6 e sopra include automaticamente il nome dell'errore e il messaggio all'interno della traccia dello stack, il che è un po 'fastidioso se si desidera eseguire la gestione degli errori personalizzati:
console.log(error.stack.replace(error.message, ''))
Questa soluzione registrerà solo il nome di errore e traccia dello stack (in modo da poter, ad esempio, formattare il messaggio di errore e visualizzarlo come si desidera da qualche altra parte nel codice).
L'esempio precedente stampare solo il nome errore di seguire dal l'analisi dello stack, ad esempio:
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)
Invece di:
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)
Prova Error.captureStackTrace(targetObject[, constructorOpt]).
const myObj = {};
function c() {
// pass
}
function b() {
Error.captureStackTrace(myObj)
c()
}
function a() {
b()
}
a()
console.log(myObj.stack)
La funzione a
e b
sono catturati nella stack errori e immagazzinate in myObj
.
- 1. Come generare una traccia dello stack profondo in node.js?
- 2. Come stampare traccia dello stack nel file di log
- 3. Come accedere tracce dello stack in node.js
- 4. Trasforma una traccia dello stack in una stringa?
- 5. Come forzare VM di pitone per stampare una traccia dello stack?
- 6. Come trovare questa traccia dello stack?
- 7. Come stampare la traccia di stack di StackOverflowException
- 8. Come posso stampare la traccia dello stack in runtime di un processo Ruby 1.9?
- 9. Come copiare una traccia dello stack dalla console cromata?
- 10. Che cosa significa "bloccato" in una traccia dello stack Java?
- 11. Individuazione della traccia dello stack effettivo Java da una traccia stack javascript
- 12. Come visualizzare la traccia dello stack su un'eccezione rilevata?
- 13. Ottenere traccia dello stack su Android NDK
- 14. Dov'è finita la traccia dello stack?
- 15. Traccia dello stack nativo su ICS?
- 16. traccia dello stack python di stampa senza sollevare nessuna eccezione
- 17. Come stampare la traccia dello stack dal layout personalizzato di logback?
- 18. Come trovo la traccia dello stack in Visual Studio?
- 19. Come ridurre l'output in una traccia stack?
- 20. Un modo semplice per stampare la traccia dello stack corrente di un'app?
- 21. C'è un modo per stampare la traccia dello stack su richiesta?
- 22. nessuna traccia dello stack per errori del nodo gelsomino
- 23. Stampa traccia dello stack da un gestore di segnale
- 24. Lua: Come chiamare l'errore senza traccia dello stack
- 25. Ottieni traccia dello stack corrente in Ruby senza generare un'eccezione
- 26. Stampa i valori dei parametri sulla traccia dello stack
- 27. TaskCanceledException in AggregateException non contiene la traccia dello stack
- 28. Eccezione ricorrente senza traccia dello stack - come resettare?
- 29. Problemi di visualizzazione della traccia dello stack C# in WinDbg
- 30. Come posso stampare il contenuto dello stack nel programma C?
o solo 'sys.puts (nuovo errore(). Stack)' (dopo aver aggiunto il modulo di sistema) – sirhc
A partire da ora, sys è privato. È sostituito da "util". – Pindatjuh
+1 per mostrare anche 'new Error(). Stack', che funziona nei casi in cui non si desidera coinvolgere la console. –