2011-10-18 35 views
6

Llamo a una función desde la consola pero cuando lanza una excepción no recibo un seguimiento de pila como lo haría si el código se ejecutara normalmente.Obteniendo el seguimiento de pila para un error al ejecutar código desde la consola en Chrome

¿Hay alguna manera de modificar mi comando (quizás con try/catch) para que me proporcione esta información?

para aclarar:

page.js:

function otherStuff() { return ['a','b',undefined,'c']; 
function doStuff() { 
    var x = otherStuff(); 
    var z = parseInt(x[2]); // this will throw an error 
} 

consola, después de cargar una página HTML que une page.js

> otherStuff(); 

No me sale el número de línea de la Error que me es devuelto Al ejecutarlo desde la página (en lugar de la consola), recibiría un número de línea y un seguimiento de la pila.

+0

¿cuál es el comando? que versión de cromo? (¿Cuál es el apellido de soltera de su madre?) – Neal

+0

Ver la actualización de mi respuesta. – Neal

Respuesta

11

Aunque detallado, esto va a imprimir el seguimiento de la pila de un error en la consola interactiva Chrome JS:

try { 
    throw new Error(); 
} catch (e) { 
    console.error(e.stack); 
} 

Por desgracia, esto no funcionará si se lanza un objeto no Error.

+0

Esto funciona bastante bien. Los datos están formateados de forma diferente, pero todos allí (lo más importante para mí es el número de línea). Si se lanza un objeto que no sea 'Error', mi información de pila se perderá, ¿correcto? Como lo estamos recuperando del objeto 'Error' en este caso –

+0

Sí, lo mismo para cualquier objeto de error personalizado que no esté basado en los objetos de error estándar de JS. Traté de establecer un punto de interrupción en la cláusula 'catch' cuando' throw'ing una cadena, tratando de ver si Chrome crea internamente algún tipo de objeto de excepción adecuado que uno podría usar, no me da tanta suerte. – millimoose

+1

Solo una nota: MobileSafari no parece proporcionar una propiedad de "pila" a sus errores. –

2

Tiene un error en el código.

Usted se echa en falta una llave de cierre:

function otherStuff() { return ['a','b',undefined,'c']; //} where am i? 
function doStuff() { 
    var x = otherStuff(); 
    var z = parseInt(x[2]); // this will throw an error 
} 

Punto lateral:

parseInt(undefined) hace no generará un error. caso en el punto: http://jsfiddle.net/maniator/Zequj/2/

+0

Correcto en todos los aspectos, por supuesto, fue un mal ejemplo apresurado. –

Cuestiones relacionadas