¿Alguien sabe cómo imprimir un seguimiento de pila en Node.js?¿Cómo imprimir un seguimiento de pila en Node.js?
Respuesta
Cualquier objeto Error
tiene un miembro stack
que atrapa el punto en el que se construyó.
var stack = new Error().stack
console.log(stack)
o más simplemente:
console.trace("Here I am!")
Ahora hay una dedicated function on console para ello:
console.trace()
Solo asegúrese de prestar atención [al comentario anterior] (http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-nodejs#comment21085596_2932410) acerca de 'console.trace()' . – Qix
De manera predeterminada, esto solo mostrará 10 fotogramas, puede usar el argumento de línea de comandos para aumentar esto, p. '--stack_trace_limit = 200' – Michael
Por lo que sé imprimiendo el seguimiento de la pila completa en nodejs no es posible, que sólo puede imprime un rastro de pila "parcial", no puedes ver de dónde vienes en el código, justo donde se produce la excepción. Eso es lo que explica Ryan Dahl en este video de youtube. http://youtu.be/jo_B4LTHi3I a las 00:56 min para ser preciso. Espero que esto ayude
cierto, pero el módulo en la respuesta de @ Timboudreau "corrige" que –
Con un módulo Nodo fácilmente disponible, es posible obtener seguimientos de pila de larga duración de Nodo (aunque con una penalización de rendimiento): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-node-js
Enlace muerto, pero se puede leer detenidamente la [copia archivada aquí] (https://web.archive.org/web/20160309113159/http : //www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-nodejs) o consulte [la biblioteca] (https://github.com/mattinsler/longjohn). –
Para imprimir StackTrace de Error
en la consola en más forma legible: resultado
console.log(ex, ex.stack.split("\n"));
Ejemplo:
[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)' ]
Como ya ha respondido, puede simplemente usar el comando trace:
console.trace("I am here");
Sin embargo, si llegó a esta pregunta buscando información sobre cómo registrar el seguimiento de la pila de una excepción, sólo tiene que registrar el objeto de excepción.
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
se registrará:
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
Si su versión Node.js es que < 6.0.0, registrando el objeto de excepción no será suficiente. En este caso, sólo imprimirá:
[Error: Something unexpected has occurred.]
Para la versión Nodo < 6, utilice console.error(e.stack)
en lugar de console.error(e)
para imprimir el mensaje de error más la pila completa, al igual que la versión actual del nodo hace.
Nota: si se crea la excepción como una cadena como throw "myException"
, no es posible recuperar el seguimiento de la pila y el registro de e.stack
produce indefinido.
Para estar seguro, puede utilizar
console.error(e.stack || e);
y va a trabajar para versiones antiguas y nuevas Node.js.
¿'console.error (e)' no imprimirá * todo * en el objeto 'e', incluido' e.stack'? – drmrbrewer
@drmrbrewer, gracias por señalar esto. Parece que el comportamiento ha cambiado entre las versiones de nodo 4.x y 7.x (probablemente un cambio de V8). He actualizado mi respuesta. – Zanon
@drmrbrewer confirmó que este comportamiento cambió en la versión 6.0.0 – Zanon
puede usar el módulo node-stack-trace que es un módulo de potencia completa para rastrear las pilas de llamadas.
Si solo desea registrar el seguimiento de la pila del error (y no el mensaje de error) El nodo 6 y superior incluye automáticamente el nombre y el mensaje del error dentro del seguimiento de la pila, lo cual es un poco molesto si desea gestión de errores personalizado:
console.log(error.stack.replace(error.message, ''))
Esta solución registrará sólo el nombre de error y seguimiento de la pila (por lo que puede, por ejemplo, dar formato al mensaje de error y lo mostrará cómo desea algún otro lugar en su código).
El ejemplo anterior imprimir sólo el nombre de error de seguimiento por el seguimiento de la pila, por ejemplo:
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)
En lugar de:
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)
Trate Error.captureStackTrace(targetObject[, constructorOpt]).
const myObj = {};
function c() {
// pass
}
function b() {
Error.captureStackTrace(myObj)
c()
}
function a() {
b()
}
a()
console.log(myObj.stack)
La función a
y b
son capturados en la pila de errores y se almacenan en myObj
.
- 1. Cómo salida de un seguimiento de pila profunda en Node.js?
- 2. ¿Cómo imprimir el seguimiento completo de pila en la excepción?
- 3. Imprimir un seguimiento de pila de otro hilo
- 4. Imprimir seguimiento de pila en la ventana de salida
- 5. Imprimir el seguimiento de pila en C++ (MSVC)?
- 6. Imprimir el seguimiento de la pila de una excepción
- 7. Imprimir la información de seguimiento de la pila de C#
- 8. cómo imprimir seguimiento de la pila en el archivo de registro
- 9. Página de error: cómo imprimir el seguimiento de pila en JSP
- 10. ¿Cómo obtengo un seguimiento de pila en OCaml?
- 11. Cómo iniciar sesión seguimientos de pila en Node.js
- 12. ¿Cómo puedo escribir un seguimiento de pila de excepción en Erlang después de atraparlo?
- 13. Error de seguimiento de pila
- 14. Cómo obtener el seguimiento de la pila de un hilo
- 15. Impresión del seguimiento de pila desde un manejador de señal
- 16. ¿Cómo puedo imprimir el seguimiento completo de la pila con GlassFish?
- 17. ¿Cómo puedo imprimir el seguimiento de la pila en tiempo de ejecución de un proceso de Ruby 1.9?
- 18. Excepción recurrente sin un seguimiento de pila: ¿cómo restablecerlo?
- 19. Cómo imprimir la traza de pila de StackOverflowException
- 20. forja de un seguimiento de la pila en Java
- 21. Excepción sin seguimiento de pila en Java
- 22. ¿Hay alguna forma de imprimir el seguimiento de pila a pedido?
- 23. ¿Manera fácil de imprimir el seguimiento de pila actual de una aplicación?
- 24. ¿Qué significa esto en un seguimiento de pila?
- 25. Imprimir pila de llamadas completa en printStackTrace()?
- 26. Encontrar el seguimiento de la pila real de Java desde un seguimiento de la pila de JavaScript
- 27. Obtención de un seguimiento de pila de SBT con Scala
- 28. Cómo obtener y no imprimir la pila BuildException/ExitStatusException traza
- 29. Imprimir un seguimiento de pila a la salida estándar de errores en Django durante el uso de manage.py runserver
- 30. Objective-C Seguimiento de la pila
o simplemente 'sys.puts (nuevo Error(). Stack)' (después de agregar el módulo del sistema) – sirhc
A partir de ahora, sys está privado. Se reemplaza por ''util''. – Pindatjuh
+1 para mostrar también 'new Error(). Stack', que funciona en los casos en los que no desea involucrar a la consola. –