2012-06-11 18 views
8

Al usar TRY-CATCH en JavaScript, ¿cómo obtener el número de línea de la línea que provocó el error?try-catch en JavaScript: cómo obtener el seguimiento de pila o el número de línea del error original

En muchos navegadores, el siguiente código funcionará muy bien y obtendré el seguimiento de la pila que apunta a la línea real que lanza la excepción.

Sin embargo, algunos buscadores no tienen "e.stack". El safari de iPhone es un ejemplo.

¿Hay alguna forma de obtener el número de línea que funcionará para todos los navegadores?

try 
{ 
    // lots of code here 
    var i = v.WillGenerateError; // how to get this line number in catch?? 
    // lots of code here 
} 
catch (e) 
{ 
    alert (e.stack) // this will work on chrome, FF. will no not work on safari 
    alert (e.line) // this will work on safari but not on IPhone 
} 

¡Muchas gracias!

ACTUALIZACIÓN: me encontré con que e.line funciona en Safari, pero todavía no está disponible en el iPhone, la última versión de IOS

+1

¿Por qué no eliminar el 'try ... catch' y ver a qué línea apunta el mensaje de error estándar? – robertc

+2

@robertc Necesito probar ... atrapar por otros motivos. Por ejemplo, me gustaría capturar el estado cuando ocurrió el error –

+0

¿Lo está consiguiendo en el iPhone en este momento? Está buscando más información para localizar un error, hay una manera de obtener más información de la que tiene en este momento, ¿por qué no quiere aprovecharla? – robertc

Respuesta

3

Intente utilizar e.lineNumber. Por ejemplo:

try { 
    var i = v.WillGenerateError; 
} catch (e) { 
    alert(e.lineNumber); 
} 
+2

@GregBala Es una [extensión de mozilla] (https://developer.mozilla.org/es/JavaScript/Reference/Global_Objects/Error) – robertc

+0

ah veo, bueno, FF admite e.stack para que uno esté bien ... solo necesita safari para funcionar ... –

0

Trate stacktrace.js, que se hizo precisamente para eso.

+0

gracias pero: "También puede pasar su propio Error para obtener una stacktrace no en IE o Safari, aunque :(" Cuál es exactamente mi situación :) –

+0

Ah, no, didn No veo eso :( – user123444555621

0
try { 
    0(); 
} catch (e) { 
    alert(e.line); 
} 

El uso de 'e.line' en un try ... catch block dará el número de línea del error en Mobile Safari.

+1

Hola, no tengo experiencia en esta área, pero su publicación apareció en una cola de revisión. Principalmente porque es solo de código, sin ninguna explicación. Siempre es una buena idea agregar alguna explicación de lo que cambiado, y por qué soluciona el problema. No olvide que un montón de novatos (o personas no familiarizadas con su campo de especialización) están en S/O y que pueden aprender una o dos cosas de usted ... pero solo si le dice ellos :) Lo que puede ser obvio para ti no es tanto para ellos. –

+0

No es solo de código, tengo una descripción después. Para expandirlo ligeramente: Usando 'e.línea 'en un try ... catch block dará el número de línea del error en Mobile Safari. – Seanonymous

Cuestiones relacionadas