Debugging-Techniken im Browser
(alan.norbauer.com)Tipps zur Nutzung des Browser-Debuggers
-
Erweiterte bedingte Breakpoints
- Erweiterung der Möglichkeiten bedingter Breakpoints durch Ausdrücke mit Nebenwirkungen
- Mit Logpoints/Tracepoints lassen sich Logs in der Konsole ausgeben, ohne die Ausführung anzuhalten
- Mit
console.countdie Anzahl der Ausführungen zählen - Wichtige Browser unterstützen Logpoints/Tracepoints (Stand: Mai 2020)
-
Watch-Fenster nutzen
- Im Watch-Fenster kann
console.logverwendet werden - Um Ausdrücke beim Zeitpunkt von DOM-Änderungen auszuführen, einen DOM-Änderungs-Breakpoint setzen und anschließend einen Watch-Ausdruck hinzufügen
- Im Watch-Fenster kann
-
Call Stack verfolgen
- Den Call Stack von Funktionsaufrufen verfolgen, um nicht übereinstimmende Aufrufe zu finden
console.tracein bedingten Breakpoints verwenden, um den Call Stack zu prüfen
-
Programmverhalten ändern
- Das Verhalten eines Programms kann direkt im Browser spontan verändert werden
- Funktionsparameter überschreiben, um das Verhalten anzupassen
-
Einfaches Performance-Profiling
- Mit der Console-Timing-API die Ausführungszeit von Code messen
- Zeitmessung mit
console.time('label')undconsole.timeEnd('label')
-
Funktions-Arität nutzen
- Breakpoints nur aktivieren, wenn mit einer bestimmten Anzahl von Argumenten aufgerufen wird
- Nützlich, um Abweichungen bei der Anzahl von Argumenten in Funktionsaufrufen zu finden
-
Zeit nutzen
- Breakpoints erst aktivieren, nachdem seit dem Laden der Seite eine bestimmte Zeit vergangen ist
- Breakpoints für einen bestimmten Zeitraum überspringen und erst danach aktivieren
-
CSS nutzen
- Breakpoints auf Basis berechneter CSS-Werte aktivieren
-
Nur bei geraden Aufrufen anhalten
- Breakpoints nur bei jeder geraden Ausführung aktivieren
-
Anhalten per Sampling
- Breakpoints nur für zufällige Stichproben der Ausführung aktivieren
-
An einer bestimmten Zeile nicht anhalten
- Mit der Option "Never Pause Here" verhindern, dass an einer bestimmten Zeile angehalten wird
-
Automatische Vergabe von Instanz-IDs
- Jeder Klasseninstanz automatisch eine eindeutige ID zuweisen
-
Programmgesteuertes Umschalten
- Bedingte Breakpoints programmgesteuert mit einem globalen Boolean umschalten
-
monitor()für Klassenaufrufe- Zum Verfolgen von Methodenaufrufen einer Klasse den Chrome-Befehl
monitorverwenden
- Zum Verfolgen von Methodenaufrufen einer Klasse den Chrome-Befehl
-
Funktionsaufrufe und Debugging
- Eine Funktion nach dem Aufruf von
debuggerin der Konsole zum Debuggen ausführen
- Eine Funktion nach dem Aufruf von
-
Bei URL-Änderungen die Ausführung anhalten
- In Single-Page-Anwendungen die Ausführung vor einer URL-Änderung anhalten
-
Debugging von Property-Zugriffen
- Einen Breakpoint aktivieren, sobald eine Property eines Objekts gelesen wird
-
copy()verwenden- Mit der Console-API
copy()Informationen direkt aus dem Browser in die Zwischenablage kopieren
- Mit der Console-API
-
HTML/CSS-Debugging
- Mit der JS-Konsole HTML/CSS-Probleme diagnostizieren
- DOM untersuchen, wenn JS deaktiviert ist
- DOM-Elemente untersuchen, die nur unter bestimmten Bedingungen erscheinen
- DOM-Snapshots aufzeichnen
- Fokussierte Elemente überwachen
- Elemente mit fetter Schrift finden
- Auf das aktuell ausgewählte Element referenzieren
- Events überwachen
Meinung von GN⁺
Der wichtigste Punkt dieses Artikels ist, dass er verschiedene Techniken und Tipps vermittelt, mit denen Entwickler mithilfe des Browser-Debuggers ihren Code effizienter debuggen und Probleme lösen können. Diese Informationen sind für Softwareentwickler sehr nützlich und besonders interessant, weil sie beim Verfolgen komplexer Bugs oder beim Lösen von Performance-Problemen Zeit sparen können.
1 Kommentare
Hacker-News-Kommentare
Die Weiterentwicklung der integrierten Debugging-Tools im Browser
Einsatz der
debugger;-Anweisungdebugger;-Anweisung ist die einzige Möglichkeit, den rekursiven Stack des Chrome-Debuggers zu schlagen.Schwierigkeiten beim Debuggen von NodeJS-Backends
pdb.set_trace()/IEx.pry().console.log-Debugging zurückkehren, was sich sehr primitiv anfühlt.Empfehlung für Werkzeug
Zugriff auf lokale Variablen in IIFEs
Debugging über UI-Strings
debugger;-Anweisung setzen.Debugging mit bedingten Breakpoints
{configOption: true}in{get configOption() { debugger; return true; }}umwandeln kann.Chrome-exklusive Funktion "Monitor Events for Element"
Fehlen der
queryObjects-APIqueryObjects-API, die eine Liste aller mit einem bestimmten Konstruktor erstellten Objekte zurückgibt.queryObjects(Function)eine Liste aller Funktionen im Heap erhalten.Schwierigkeiten bei der Nutzung von Watch-Variablen