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.
Und wie ändert es auch Webseiten, so dass es Elemente beleuchtet, wenn der Cursor über ihnen schwebt? – djondal