console.trace()
muestra su resultado en la consola.
Quiero obtener los resultados como una cadena y guardarlos en un archivo.
No defino nombres para funciones y tampoco puedo obtener sus nombres callee.caller.name
.
98
console.trace()
muestra su resultado en la consola.
Quiero obtener los resultados como una cadena y guardarlos en un archivo.
No defino nombres para funciones y tampoco puedo obtener sus nombres callee.caller.name
.
Respuestas:
No estoy seguro de Firefox, pero en v8 / chrome puedes usar un método en el constructor Error llamado
captureStackTrace
. ( Más info aquí )Así que una forma hacky de conseguirlo sería:
Normalmente,
getStackTrace
estaría en la pila cuando se captura. El segundo argumento nogetStackTrace
se incluye en el seguimiento de la pila.fuente
Error().stack
. Aunque los nombres de objeto y función se pierden en Firefox y el nombre de objeto se pierde en Chrome (igual queError.captureStackTrace
),Error().stack
funciona en ambos navegadores y me da suficiente información para depurar.Error.stack es lo que necesita. Funciona en Chrome y Firefox. Por ejemplo
dará en Chrome:
y en Firefox:
fuente
(new Error).stack
Esto dará un seguimiento de la pila (como una matriz de cadenas) para Chrome, Firefox, Opera e IE10 + modernos.
Uso:
Excluye de la pila su propia llamada, así como el título "Error" que utilizan Chrome y Firefox (pero no IE).
No debería fallar en navegadores más antiguos, solo devolver una matriz vacía. Si necesita una solución más universal, consulte stacktrace.js . Su lista de navegadores compatibles es realmente impresionante, pero en mi opinión es muy grande para esa pequeña tarea para la que está destinada: 37 Kb de texto minimizado, incluidas todas las dependencias.
fuente
Existe una biblioteca llamada stacktrace.js que le brinda seguimientos de pila entre navegadores. Puede usarlo simplemente incluyendo el script y llamando en cualquier momento:
fuente
Esta es solo una pequeña mejora del excelente código de Konstantin. Reduce un poco el costo de lanzar-atrapar y simplemente crea una instancia de la pila de errores:
Por lo general, quiero un nivel específico de seguimiento de pila (para mi registrador personalizado), por lo que esto también es posible al llamar:
fuente
solo necesitas
var stack = new Error().stack
. esta es una versión simplificada de la respuesta de @sgouros.Probablemente no funcione en todos los navegadores (funciona en Chrome).
fuente