2009-12-21 15 views
12

He heredado un montón de código que está haciendo cosas inesperadas cuando hago clic en algunos elementos <button>.Indicando a Firebug que se rompa tan pronto como se ejecute Javascript

La página tiene una gran cantidad de Javascript, y no está claro qué eventos, si los hay, se han configurado en el botón o sus elementos principales. Estoy tratando de encontrar dónde comienza la ejecución para poder depurar lo que está sucediendo.

¿Hay alguna manera de romper Firebug (o cualquier depurador de Javascript) siempre que se ejecute cualquier código de javascript? ¿Tal vez de alguna manera establecer un punto de interrupción en cada línea programáticamente? ¿O hay alguna otra forma de averiguar a qué evento está respondiendo el botón (usuarios de la página boh Prototype, jQuery y algún Javascript personalizado) Lo sé)

Respuesta

12

Simplemente presione el botón Pausa en el panel Firebug (a la izquierda esquina superior de la misma, dos líneas verticales amarillas, cuando se selecciona la pestaña Script) - y se detendrá en la primera cadena JS.

Pero esto detendrá la ejecución de JS en CUALQUIER evento, por lo que si tiene un botón que atrapa el mouse y hace clic en el mouse no podrá detenerlo con el mouse, ya que el script se detendrá cuando el mouse se mueva intenta mover el mouse sobre este botón. Le sugiero que simplemente inserte alertas() en los lugares sospechosos, después de algunas iteraciones encontrará exactamente la cadena que necesita (donde se produce el error).

+1

En algunos casos puede evitar el problema de mover/hacer clic en el mouse. Para un botón o cualquier otro elemento que pueda recibir el foco, puede tabular el elemento y presionar la barra espaciadora o ingresar para disparar el evento click. –

+1

Hmmm, +1 para obtener buena información, aunque al hacer clic en ese botón no parece estar funcionando en esta página en particular (lo que, en términos de JavaScript, es un poco complicado). El botón hace su pequeña cosa brillante, pero desencadenar acciones de JavaScript en la página no da vida al depurador. –

+0

Mismo problema aquí. No se puede detener en: \t setTimeout (function() { \t \t window.location = '/ someBad/lugar' \t}, 0); –

1

Si se trata de un problema de depuración genérico, puede utilizar Web Inspector en Safari/Chrome. Una ventaja añadida es que se puede tirar la siguiente declaración en el código JavaScript para tirar hacia arriba el depurador:

... 
debugger; // Will trigger the debugger 
... 

lo contrario se puede establecer puntos de interrupción, puntos de interrupción condicionales, haga una pausa en la siguiente ejecución, y todos los trucos habituales. Algunos buenos videos están disponibles here.

Respondiendo a la sugerencia alert antes. Recomendaría seriamente usar console.log o console.dir si tiene acceso a un depurador. Obtendrá más información sin bloquear la ejecución de su script. Además, no olvide que ese console.log puede tomar múltiples parámetros para que pueda imprimir muy bien los datos, no tiene que limitarse a una sola cadena como alert.

+0

Web Inspector no resuelve este problema. El comportamiento no deseado no es un alto en la ejecución. El código se está ejecutando correctamente, pero no haciendo lo que queremos. Necesito encontrar el código que se activa con el clic. –

+0

Mi comentario fue solo una regurgitación de lo que ya se dijo, solo con las ventajas que ofrece Web Inspector. Estoy tratando de señalar que Firebug no es la única respuesta. Si desea saber qué sucede al hacer clic, eche un vistazo a los detectores de eventos para el nodo (y los padres) en donde hace clic. Esto está disponible en los parásitos WebKit y en la extensión Eventbug mencionada para Firebug. –

2

Si quiere ver qué eventos están configurados en la página, también puede probar Eventbug.

3

Cierre el navegador de Internet y ábralo nuevamente. "Break on next" comenzará a funcionar nuevamente. De lo contrario Firebug simplemente ignora esta opción después de un tiempo, y no se rompe sino que ejecuta javascripts para todos los eventos sin advertirte.

Cuestiones relacionadas