2010-07-21 44 views
10

He depurado a través de JavaScript utilizando Firebug más de cien veces sin preocuparme de lo que está sucediendo allí. Quiero saber exactamente cómo un Firebug maneja la depuración de JavaScript/DOM.¿Cómo funciona Firebug internamente?

decir te puse un punto de ruptura en alguna declaración dentro de un método y de iniciar la depuración. Quiero saber qué está pasando allí?

+2

¿Y también cómo modifica las páginas web para que resalte los elementos cuando el cursor se cierne sobre ellas? – djondal

Respuesta

8

Al hacer clic en una línea para establecer un punto de interrupción, Firebug registra la URL del archivo y el número de línea en caso de que vuelva a cargar la página. A continuación, busca la URL/línea en sus estructuras de datos internas para decidir qué función de Javascript (llamada 'script' en Mozilla) quiere establecer como punto de corte. Luego llama a una función de la plataforma Mozilla para mapear el número de línea a un contador de programa relativo al inicio de la función. Finalmente llama a la plataforma para establecer un punto de interrupción en el contador del programa.

Volver al activar el panel Script, Firebug devoluciones de llamada registrado en la plataforma. Uno de ellos, onBreak, maneja puntos de interrupción. A medida que la plataforma ejecuta el código JS, comprueba sus estructuras internas para ver si el contador del programa actual tiene un conjunto de puntos de corte. Si es así, detiene la ejecución de JS y llama a firebug.

Firebug examina el punto de interrupción para decidir si se trata de un punto de interrupción condicional, si tiene los datos correctos para admitir la interfaz de usuario del depurador en este punto de interrupción, y así sucesivamente. Si las condiciones son buenas, le dice a la plataforma que suspenda la depuración, la ejecución de JavaScript para la página web y los eventos de la plataforma para la página web. Luego muestra el archivo de origen para el punto de interrupción y resalta la línea. Si las condiciones no son buenas, simplemente continúa.

Las piezas complejas vienen cuando la plataforma no hace ningún apoyo número de línea correcta de programa de mapeo mostrador. Por ejemplo, Firebug tiene un montón de código para tratar con eval() y los manejadores de eventos generados por el navegador.

Preguntas como éstas son mejores en el grupo de noticias Firebug en mi opinión.

+2

Gracias por la respuesta detallada. Sin embargo, creo que SO es un gran lugar para preguntas como esta. Muchas tecnologías tienen sus propios grupos de noticias y resúmenes de correo electrónico y foros, pero aquí puedo encontrar información mucho más fácilmente. Si estuviera comenzando un nuevo proyecto, haría SO el sitio oficial de preguntas y respuestas. –

2

Firebug usa jsdIDebuggerService que es un servicio de depurador.

Esta página contiene información sobre firebug internals, así como un enlace con el código fuente. No especifica todos los detalles exactamente, pero debería servir como punto de partida.

Cuestiones relacionadas