2010-07-21 12 views
10

Ich habe über JavaScript debuggt mit Firebug mehr als hundert Mal ohne sich Gedanken über was passiert ist. Ich möchte wissen, wie genau ein Firebug JavaScript/DOM-Debugging behandelt.Wie funktioniert Firebug intern?

Angenommen, ich setze einen Breakpoint auf eine Anweisung innerhalb einer Methode und starte das Debugging. Ich möchte wissen, was dort vor sich geht.

+2

Und wie ändert es auch Webseiten, so dass es Elemente beleuchtet, wenn der Cursor über ihnen schwebt? – djondal

Antwort

8

Wenn Sie auf eine Zeile klicken, um einen Haltepunkt festzulegen, zeichnet Firebug die URL und die Zeilennummer der Datei auf, falls Sie die Seite erneut laden. Dann sucht es die URL/Zeile in seinen internen Datenstrukturen nach, um zu entscheiden, welche Javascript-Funktion (in Mozilla als "Skript" bezeichnet) den Breakpoint enthalten soll. Als Nächstes ruft es eine Mozilla-Plattformfunktion auf, um die Zeilennummer relativ zum Start der Funktion einem Programmzähler zuzuordnen. Schließlich ruft er die Plattform auf, um einen Haltepunkt auf dem Programmzähler zu setzen.

Zurück, als Sie das Skriptfeld aktivierten, registrierte Firebug Rückrufe mit der Plattform. Eine davon, onBreak, behandelt Haltepunkte. Während die Plattform JS-Code ausführt, überprüft sie ihre internen Strukturen, um festzustellen, ob der aktuelle Programmzähler einen gesetzten Haltepunkt hat. Wenn dies der Fall ist, stoppt es die Ausführung von JS und ruft zurück zu Firebug.

Firebug betrachtet dann den Haltepunkt, um zu entscheiden, ob dies ein bedingter Haltepunkt ist, ob er über die richtigen Daten zur Unterstützung der Debugger-Benutzerschnittstelle an diesem Haltepunkt verfügt, und so weiter. Wenn die Bedingungen in Ordnung sind, wird die Plattform angewiesen, das Debugging, die Ausführung von JavaScript für die Webseite und die Plattformereignisse für die Webseite auszusetzen. Dann zeigt es die Quelldatei für den Haltepunkt und markiert die Zeile. Wenn die Bedingungen nicht gut sind, geht es einfach weiter.

Die komplexen Teile kommen, wenn die Plattform keine korrekte Zeilennummer unterstützt, um Counter-Mapping zu programmieren. Zum Beispiel hat Firebug viel Code, um mit eval() und browsergenerierten Event-Handlern umzugehen.

Fragen wie diese sind meiner Meinung nach besser auf der Firebug Newsgroup.

+2

Danke für die ausführliche Antwort. Ich denke jedoch, dass SO ein großartiger Ort für Fragen wie diese ist. Viele Technologien haben ihre eigenen Newsgroups und E-Mail-Digests und Foren, aber ich kann hier viel einfacher Informationen finden. Wenn ich ein neues Projekt starten würde, würde ich SO zur offiziellen Q & A-Seite machen. –

2

Firebug verwendet jsdIDebuggerService, das ist ein Debugger-Dienst.

Diese Seite enthält Informationen über firebug internals sowie einen Link zum Quellcode. Es spezifiziert nicht alle Details genau, aber es sollte als ein Ausgangspunkt dienen.

Verwandte Themen