2010-09-03 7 views
11

Tengo un sistema que se genera utilizando la biblioteca ext-js. Parte del sistema enumera las órdenes que fluyen a través de una tienda en línea. Cuando se hace clic en una fila, se muestran detalles adicionales de la orden. Hace unos días, un mensaje que decía "FIXME: created panelID ..." comenzó a aparecer tan pronto como se hace clic en una fila. Después de eso, el funcionamiento normal continúa, es decir, el mensaje de error es simplemente molesto y no interrumpe la ejecución normal después de que aparece.código JS de depuración que desencadena una alerta()

Estoy tratando de depurar el código JS para ver en qué circunstancias aparece el mensaje de error, es decir, ¿por qué comenzó a aparecer de repente? Estoy tratando de hacer esto con FireBug. ¿Alguien tiene algún consejo que pueda usar para lograr mi objetivo de establecer qué línea de código desencadena la alerta()? Cualquier comentario sobre el tema es muy apreciado.

Respuesta

15

Firebug tiene una línea de comando API para crear puntos de interrupción mediante programación. Por ejemplo:

debug(fn); 

crea un punto de interrupción de la función fn. Lamentablemente, esto no se puede usar para funciones con código nativo (funciones integradas como alert). Sin embargo, puedes usar este truco.

insertar un bloque de secuencia de comandos en su código con este Script-

window.alert_ = window.alert; 
window.alert = function() { 
    alert_.apply(window,arguments) 
}; 

Lo que has hecho es redefinir window.alert con su propia, que hace lo mismo.

Ahora, coloque el punto de interrupción en Firebug con:

debug(alert); 

Ahora, la próxima vez que un script llama alerta, obtendrá un punto de interrupción en su función. Luego puede analizar el seguimiento de la pila y averiguar de dónde se está llamando.

+0

que tengo que decir, esto es brillante sangrienta !! No sabía que este tipo de cosas se podía hacer. Tu eres un campeón! :) – doz87

1

Si puede recrearlo, puede poner un punto de interrupción en la línea donde aparece la alerta y ver el trazado de la pila y descubrir la ruta.

Si no puede recrearlo, debe buscar de dónde proviene la alerta. Después de eso mire lo que llama a ese método y vea qué valores se deben establecer. Camina por el camino hasta que encuentres el evento click.

No hay una respuesta real sobre la depuración de JavaScript ya que cada aplicación se codifica de manera diferente. Mucho tiempo es trabajo manual de recorrer el código y descubrir qué camino tomar. Agregar relojes, console.logs y alertas será tu amigo para descifrar estados variables. Agregue puntos de interrupción y recorra el código.

+0

Gracias por su aporte. Estoy tratando de hacer lo que Chetan Sastry me ha propuesto. Estoy obteniendo "demasiada recursividad" que intentaré resolver por mi cuenta. –

3

Aquí hay más versión multi-navegador de respuesta de @ chetan

 window.alert_ = window.alert; 
     window.alert = function() { 
      debugger; 
      alert_.apply(window, arguments); 
     }; 
Cuestiones relacionadas