Lektion 4 12 Min.

Debugging-Werkzeuge richtig einsetzen

Die wichtigsten Debugging-Werkzeuge meistern — Print-Debugging, IDE-Debugger, Browser DevTools und KI als Debugging-Partner fuer jeden Anwendungsfall.

🔄 Quick Recall: In der vorherigen Lektion hast du den 5-Schritte-Debugging-Prozess vertieft: reproduzieren, isolieren (binaere Suche!), identifizieren (Hypothesen testen), beheben und verifizieren. Jetzt bekommst du die konkreten Werkzeuge an die Hand, die jeden Schritt effizienter machen.

Debugging-Werkzeuge lassen dich den Zustand deines Programms waehrend der Ausfuehrung beobachten — Variablenwerte, Aufrufstapel, Netzwerkanfragen, DOM-Aenderungen. Das richtige Werkzeug fuer jede Situation zu waehlen, macht den Unterschied zwischen Minuten und Stunden.

Werkzeug 1: Print/Log-Debugging

Die einfachste und universellste Debugging-Technik — und die am meisten unterschaetzte.

Strategisches Print-Debugging (nicht wahllos):

# SCHLECHT: Wahllose Prints, die dir nichts sagen
print(data)
print("hier")
print(result)

# GUT: Beschriftete Prints mit Kontext
print(f"[verarbeite_daten] Input: {type(data)} len={len(data)}")
print(f"[verarbeite_daten] Nach Filter: {len(gefiltert)} Eintraege")
print(f"[verarbeite_daten] Ergebnis: {result} (erwartet: positiv)")

Drei Regeln fuer gutes Print-Debugging:

  1. Beschrifte jeden Print[Funktionsname] als Prefix, damit du in der Ausgabe weisst, woher jede Zeile kommt
  2. Zeige den Kontext — Nicht nur den Wert, sondern auch Typ, Laenge oder erwarteten Wert
  3. Raeume danach auf — Print-Statements im Code lassen ist wie Geruest am fertigen Haus

KI-Prompt fuer Print-Debugging:

„Ich debugge diese Funktion: [CODE]. Fuege strategische Print-Statements ein, die mir zeigen: (1) Welche Daten in die Funktion kommen, (2) wie sie sich bei jedem Schritt aendern, (3) welche Entscheidungspfade genommen werden, (4) was am Ende herauskommt. Beschrifte jeden Print eindeutig."

Quick Check: Warum ist „print(data)" schlechtes Debugging? (Antwort: Ohne Beschriftung weisst du bei mehreren Prints nicht, welche Ausgabe zu welchem Print gehoert. Ohne Kontext (Typ, Laenge, erwarteter Wert) siehst du den Wert, verstehst aber nicht, ob er korrekt ist. Strategisches Print-Debugging heisst: Jeder Print beantwortet eine spezifische Frage.)

Werkzeug 2: IDE-Debugger (Breakpoints)

FeatureWas es tutWann einsetzen
BreakpointPausiert die Ausfuehrung an einer ZeileZustand an einem bestimmten Punkt inspizieren
Bedingter BreakpointPausiert nur wenn Bedingung erfuellt„Stoppe wenn i > 100 und wert < 0"
Step OverAktuelle Zeile ausfuehren, zur naechstenZeile fuer Zeile der Ausfuehrung folgen
Step IntoIn einen Funktionsaufruf springenTiefer in eine Funktion eintauchen
Step OutBis zum Rueckgabewert der Funktion laufenFertig mit der Inspektion, weiter
Watch ExpressionEinen Wert kontinuierlich ueberwachenBerechnete Werte verfolgen

Wann vom Print zum Debugger wechseln:

  • Mehr als 5 Print-Statements noetig → Debugger
  • Mehrere Variablen in einer Schleife verfolgen → Debugger
  • Du willst den Code nicht veraendern (Produktionscode) → Debugger
  • Komplexe Objekte inspizieren → Debugger (besser als Print fuer verschachtelte Strukturen)

KI-Prompt fuer Breakpoint-Strategie:

„Ich debugge [BUG-BESCHREIBUNG]. Wo sollte ich Breakpoints setzen und welche Bedingungen verwenden? Mein Code: [CODE]."

Werkzeug 3: Browser DevTools

Fuer Web-Entwicklung sind die DevTools dein wichtigstes Werkzeug:

TabDebuggt wasWichtigste Features
ConsoleJavaScript-Fehler, Log-AusgabeFehler, Warnungen, interaktive JS-Ausfuehrung
ElementsHTML/CSS-Zustand, Event ListenerDOM inspizieren, Styles live aendern
SourcesJavaScript-AusfuehrungBreakpoints, Code schrittweise durchgehen
NetworkAPI-Aufrufe, Ressourcen-LoadingRequest/Response-Daten, Timing, Fehler
PerformanceLaufzeit-PerformanceFrame Rate, lange Tasks, Rendering
ApplicationSpeicher, CookieslocalStorage, sessionStorage, Cookies

Debugging-Workflow nach Symptom:

SymptomStarte mitDann pruefe
Button funktioniert nichtConsole (Fehler)Elements (Event Listener) → Sources
Seite laedt langsamNetwork (Wasserfall)Performance (lange Tasks)
Falsche Daten angezeigtNetwork (API-Response)Sources (Datenverarbeitung)
Layout kaputtElements (berechnete Styles)Console (CSS-Warnungen)
State aktualisiert nichtSources (Breakpoints im State)Application (Storage)

Werkzeug 4: KI als Debugging-Partner

KI funktioniert hervorragend als „Rubber Duck" — du erklaerst das Problem, und allein durch das Strukturieren deiner Gedanken findest du oft die Loesung.

KI-Prompt fuer Rubber-Duck-Debugging:

„Ich stecke bei einem Bug fest. Lass mich erklaeren, was passiert, und hilf mir, es durchzudenken: (1) Erwartetes Verhalten: [WAS PASSIEREN SOLLTE]. (2) Tatsaechliches Verhalten: [WAS STATTDESSEN PASSIERT]. (3) Was ich bisher geprueft habe: [LISTE]. (4) Meine aktuelle Hypothese: [WAS ICH GLAUBE, WAS FALSCH IST]. Finde Schwachstellen in meiner Hypothese. Was uebersehe ich? Was sollte ich noch pruefen?"

Quick Check: Du setzt einen Breakpoint in einer JavaScript-Async-Funktion. Der Breakpoint wird nie ausgeloest, obwohl die Funktion definitiv aufgerufen wird. Warum? (Antwort: Haeufige Ursachen: (1) Die Source Map stimmt nicht mit dem laufenden Code ueberein — Projekt neu bauen. (2) Die Funktion wirft einen Fehler VOR deiner Breakpoint-Zeile. Breakpoint frueher setzen oder „Pause on caught exceptions" aktivieren. (3) Falsche Datei — bei mehreren Kopien (gebundelt und Quellcode) ist der Breakpoint moeglicherweise in der Datei, die nicht ausgefuehrt wird.)

Wann welches Werkzeug?

SituationBestes WerkzeugWarum
Schneller Wert-CheckPrint-StatementAm schnellsten einzufuegen
Komplexe ZustandsinspektionIDE-DebuggerAlle Variablen gleichzeitig sehen
Webseiten-VerhaltenBrowser DevToolsDOM, Netzwerk, JS zusammen
API/Netzwerk-ProblemeNetwork-Tab / curlExakte Request und Response sehen
Produktions-BugStrukturiertes LoggingDebugger nicht in Produktion moeglich
Parallele/Async-BugsLogging mit ZeitstempelDebugger veraendert das Timing

Key Takeaways

  • Strategisches Print-Debugging (beschriftet, mit Kontext) ist das universellste Werkzeug — funktioniert ueberall, hinterlaesst eine Spur und ist fuer einfache Checks schneller als ein Debugger; wechsle bei mehr als 5 Prints
  • Browser DevTools-Tabs entsprechen Debugging-Ebenen: Console fuer Fehler, Elements fuer DOM/Events, Sources fuer Code-Stepping, Network fuer API-Aufrufe — in dieser Reihenfolge grenzt du systematisch ein
  • KI als Rubber-Duck-Partner: Erwartetes Verhalten, tatsaechliches Verhalten, bisherige Checks und Hypothese erklaeren — KI findet Luecken in deinem Denken

Up Next

In der naechsten Lektion lernst du die haeufigsten Bug-Muster — die wiederkehrenden Fehlertypen, die 80% aller Bugs verursachen — damit du sie sofort erkennst statt von Null zu debuggen.

Wissenscheck

1. Du debuggst eine Funktion mit 5 Variablen, die sich ueber 20 Schleifendurchlaeufe aendern. Du hast 5 Print-Statements eingefuegt — jetzt hast du 100 Zeilen Ausgabe und findest kein Muster. Was ist der bessere Ansatz?

2. Du hast eine Webseite, auf der ein Button-Klick einen Zaehler aktualisieren soll. Beim Klicken passiert nichts. Wo faengst du in den Browser DevTools an?

3. Ein erfahrener Entwickler in deinem Team sagt: 'Ich benutze fast nie einen Debugger — 90% meines Debuggings mache ich mit Print/Log-Statements.' Ist das ein valider Ansatz?

Beantworte alle Fragen zum Prüfen

Erst das Quiz oben abschließen

Passende Skills