2009-12-14 15 views
24

Al capturar/manejar excepciones en JavaScript, ¿cómo puedo determinar cuál era la pila de llamadas cuando se produjo la excepción? (Y si es posible también lo era el número de línea)Manejo de excepciones de JavaScript: muestra el número de línea

try 
{ 
    // etc... 
} 
catch (ex) 
{ 
    // At this point here I want to be able to print out a detailed exception 
    // message, complete with call stack, and if possible line numbers. 
} 

Respuesta

16

Cada navegador maneja esto de manera diferente, así que no hay una manera universal a hacerlo. This blog post tiene un buen código para volcar un seguimiento de pila para la mayoría de los navegadores compatibles. No creo que haya una buena forma de proporcionar el número de línea.

Si está buscando depurar una función en particular, Firebug tiene una buena función de seguimiento de pila (vis console.trace()).

+0

Por supuesto, FireBug! – Upperstage

+1

Ese blog es bastante viejo (2008). Tiene que haber una mejor manera. – RayLoveless

+0

entrada de blog está muerta ... –

11

Eche un vistazo a this.

una forma de analizar la información disponible:

try 
{ 
    doInit(); 
} catch(err) 
{ 
    var vDebug = ""; 
    for (var prop in err) 
    { 
     vDebug += "property: "+ prop+ " value: ["+ err[prop]+ "]\n"; 
    } 
    vDebug += "toString(): " + " value: [" + err.toString() + "]"; 
    status.rawValue = vDebug; 
} 
+0

Solo una nota: si está utilizando el lado del servidor de nodos, esto funciona muy bien. Upvoted - ¡Gracias por publicar! – j03m

1

he descubierto que en JavaScript se ejecuta en IE no es posible capturar un seguimiento de pila en el punto que se detecta una excepción. De acuerdo con this PDF, la única forma de obtener un seguimiento de pila en IE es si no maneja la excepción.