¿Alguien sabe cómo imprimir un seguimiento de pila en Node.js?
javascript
node.js
stack-trace
mike.toString
fuente
fuente
sys.puts(new Error().stack)
(después de agregar el módulo del sistema)'util'
.new Error().stack
, que funciona en casos en los que no desea involucrar a la consola.trace
es que también muestra la línea / contexto actual, questack
no lo hace. Supongo que la información está en el objeto de error si desea crear manualmente esa línea.Ahora hay una función dedicada en la consola para eso:
fuente
console.trace()
.--stack_trace_limit=200
Como ya se respondió, simplemente puede usar el comando trace :
Sin embargo, si llegaste a esta pregunta buscando cómo registrar el seguimiento de la pila de una excepción , simplemente puedes registrar el objeto Excepción.
Se registrará:
Si su versión de Node.js es <que 6.0.0 , el registro del objeto Exception no será suficiente. En este caso, solo imprimirá:
Para la versión de nodo <6, use en
console.error(e.stack)
lugar deconsole.error(e)
imprimir el mensaje de error más la pila completa, como lo hace la versión de nodo actual.Nota: si la excepción se crea como una cadena como
throw "myException"
, no es posible recuperar el seguimiento de la pila y ele.stack
rendimiento del registro no está definido .Para estar seguro, puedes usar
y funcionará para las versiones antiguas y nuevas de Node.js.
fuente
console.error(e)
imprimirá todo en ele
objeto, incluidoe.stack
?Para imprimir stacktrace
Error
en la consola de una manera más legible:Resultado de ejemplo:
fuente
Con un módulo Node fácilmente disponible, es posible obtener trazas de pila completas de Node (aunque con una penalización de rendimiento menor): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack -traces-for-node-js
fuente
Pruebe Error.captureStackTrace (targetObject [, constructorOpt]) .
La función
a
yb
se capturan en la pila de errores y se almacenan enmyObj
.fuente
stack
propiedad, tendrá que llamar a esto si el Nodo> = 6:Error.captureStackTrace(error)
.Error.captureStackTrace
muestre en el seguimiento de la pila, puede omitirlo pasándolo como elconstructorOpt
argumento.Por lo que sé, imprimir la traza completa de la pila en nodejs no es posible, solo puede imprimir una traza de pila "parcial", no puede ver de dónde vino en el código, solo dónde ocurre la excepción. Eso es lo que Ryan Dahl explica en este video de YouTube. http://youtu.be/jo_B4LTHi3I a las 56:30 min para ser precisos. Espero que esto ayude
fuente
La respuesta de @isaacs es correcta, pero si necesita una pila de errores más específica o más limpia , puede usar esta función:
Esta función está inspirada directamente de la
console.trace
función en NodeJS .Código fuente: versión reciente o versión antigua .
fuente
err.stack
Es la respuesta más correcta.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 del error y el mensaje dentro del seguimiento de la pila, lo cual es un poco molesto si desea realizar un tratamiento de errores personalizado:
console.log(error.stack.replace(error.message, ''))
Esta solución solo registrará el nombre del error y el seguimiento de la pila (para que pueda, por ejemplo, formatear el mensaje de error y mostrarlo como desee en otro lugar de su código).
El ejemplo anterior solo imprimirá el nombre del error seguido del seguimiento de la pila, por ejemplo:
En vez de:
fuente
En caso de que alguien todavía esté buscando esto como yo, entonces hay un módulo que podemos usar llamado "stack-trace". Es muy popular Enlace NPM
Luego camina a través del rastro.
O simplemente imprima la traza:
fuente
puede usar el módulo node-stack-trace , que es un módulo lleno de energía para rastrear las pilas de llamadas.
fuente