2009-01-17 26 views

Respuesta

10

Hay camino, aunque más caro: lanzar una excepción, cogerlo inmediatamente, y cavar a cabo la primera entrada de su seguimiento de la pila. Consulte el ejemplo here sobre cómo analizar la traza. El mismo truco también se puede usar en Java simple (si el código está compilado con la información de depuración activada).

Editar: Aparentemente no todos los navegadores soportan esto. La buena noticia es (¡gracias por el comentario, Christoph!) Que algunos navegadores exportan el nombre del archivo fuente y el número de línea directly through the fileName and lineNumber properties of the error object.

+2

navegadores que añaden un seguimiento de pila a error objetos también podrían exponer una propiedad 'lineNumber' directamente - sin necesidad de analizar allí ... – Christoph

6

La respuesta corta es sin.

La respuesta larga es que, dependiendo de su navegador, es posible que pueda lanzar & para capturar una excepción y extraer un rastro de pila.

Sospecho que está utilizando esto para la depuración (así lo espero, de todos modos!) Por lo que su mejor opción sería usar Firebug. Esto le dará un objeto console; puede llamar al console.trace() en cualquier punto para ver qué está haciendo su programa sin interrumpir la ejecución.

0

Hay una solución.

lo general, el __ __ LÍNEA combinado con el __ __ archivo se utiliza para marcar un código de localizaciones en y el marcado se realiza para encontrar ese lugar más tarde.

Sin embargo, es posible lograr el mismo efecto utilizando Identificadores únicos globales (GUID-s) en lugar de __ LINE __ y __ FILE __. Los detalles de la solución residen en el COMMENTS.txt de un conjunto de herramientas con licencia de BSD que automatiza el proceso.

+1

No entiendo ... ¿Puede usted explicar? – Jason

3

A __LINE__ en C se ha ampliado por preprocessor que literalmente lo reemplaza con el número de línea de la entrada actual. Por lo tanto, cuando vea

printf("Line Number: %d\r\n", __LINE__); 

el compilador ve:

printf("Line Number: %d\r\n", 324); 

En efecto, el número (324 en este caso) está codificada en el programa. Es solo este mecanismo de dos pasos que hace esto posible.

No sé cómo PHP logra esto (¿es pre-procesada también?).

+3

Sí, PHP está preprocesado. De hecho, es un acrónimo recursivo: PHP -> PHP: preprocesador de hipertexto. Sin embargo, el acrónimo original era * Páginas de inicio personales *. – alex

2

Puede intentar ejecutar el preprocesador C (por ejemplo, cpp de la Colección de compiladores GNU) en sus archivos javascript, ya sea dinámicamente con cada solicitud o de forma estática, haciendo que esta operación se aplique cada vez que cambie sus archivos javascript. Creo que la sintaxis de JavaScript es lo suficientemente similar para que esto funcione.

entonces tendría todo el poder del preprocesador C.

0

creo preprocesamiento tiene más sentido, en el que se añade ninguna sobrecarga en tiempo de ejecución. Una alternativa al preprocesador C es usar perl, como en el procedimiento de 2 pasos a continuación:

1 - agregue "Línea n. ° 999 \ n" a cada línea del guión que desea numerar, p.,

alert ("Line # 999 \n"+request.responseText); 

2 – run the perl below: 

cat my_js.js | perl -ane "{ s/Line # \d+ /Line # $. /; print $_;}" > C_my_js.js; mv C_my_js.js my_js.js 
Cuestiones relacionadas