Skip to main content
Inhaltsverzeichnis

Inhaltsverzeichnis

Lesezeit: 12 Min.
#automation#bug#hunting#claude#code#debugging#beginners
Einsteiger12 Min.

Fehlersuche und -behebung mit Claude Code: Ein praktischer Leitfaden

Ein umfassender praktischer Leitfaden für das Debugging von Code über Claude Code: Analyse von Stack Traces, Auswertung von Server-Logs, Behebung von TypeScript-Fehlern, Korrektur von Tests sowie Beseitigung von Performance-Engpässen.

Veröffentlicht:
FÜR KI-AGENTChatGPTClaude

1. Warum das Debugging mit Claude Code effizienter ist als traditionelle Methoden

Der klassische Prozess der Fehlersuche verwandelt sich oft in eine ermüdende Routine: Entwickler verbringen Stunden damit, sich durch verschachtelte Stack Traces im Terminal zu kämpfen, setzen manuell Dutzende von console.log-Anweisungen oder Debugger-Haltepunkte und versuchen, Daten aus mehreren Modulen zu korrelieren.

Der Terminal-Agent Claude Code verändert diesen Ansatz grundlegend: Durch den direkten Zugriff auf das Dateisystem kann er augenblicklich die Ausführungskette vom Client-UI über die Backend-Controller bis hin zu Datenbankabfragen nachverfolgen.

mermaid
flowchart TD A["Симптом: Помилка або аварійний лог"] --> B["Claude Code CLI"] B --> C["Аналіз Stack Trace & Виділення файлів"] C --> D["Read & Grep по кодовій базі"] D --> E["Локалізація джерела збою"] E --> F["Генерація гіпотези та виправлення"] F --> G["Автоматичний прогін тестів / збірки"] G -->|Успіх| H["Коміт виправлення"] G -->|Помилка| E

Vergleich zwischen manuellem Debugging und dem Einsatz von Claude Code

KriteriumTraditionelles manuelles DebuggingDebugging mit Claude Code
FehlerlokalisierungManuelle Navigation durch Zeilen im Stack Trace innerhalb der IDEAutomatische Zuordnung des Fehlers zum Projektkontext
Arbeit mit LogsVisuelle Suche nach Anomalien in Tausenden von ZeilenAutonome Analyse strukturierter Logs über CLI-Pipelines
Komplexe AbhängigkeitenNotwendigkeit, den Call-Graph von 5–10 Dateien im Kopf zu behaltenSchrittweises semantisches Tracing von Datenflüssen
TypeScript-FehlerVersuche, Probleme schnell durch as any zu umgehenKorrekte Behebung der Type Narrowing-Probleme ohne Verletzung des Systems
Verifizierung des FixesManueller Neustart der App oder Tests in der KonsoleAutomatischer zyklischer Testlauf bis zum vollständigen Erfolg
Hinweis

Claude Code ersetzt nicht das Codeverständnis des Entwicklers, verkürzt aber die Zeit vom Auftreten eines Incidents bis zur Lokalisierung der Ursache um das 3- bis 5-fache.


2. Anatomie des perfekten Bug-Reports für einen AI-Assistenten

Die Qualität und Geschwindigkeit der Problemlösung hängen direkt davon ab, wie vollständig der Fehler im Eingabe-Prompt beschrieben wird.

Vage Anfrage vs. strukturierte Beschreibung

Warnung

Ineffektive Anfrage: „Die App ist kaputt, das Registrierungsformular funktioniert nicht, schau mal, was da los ist.“

Bei einer solchen Beschreibung muss der Agent wahllos Dutzende von Dateien durchsuchen und verschwendet Kontextfenster-Limits für Vermutungen.

Tipp

Professionelle ingenieurtechnische Beschreibung: „Beim Absenden des Formulars unter /register erhält der Benutzer einen Status 500. In der Browser-Konsole erscheint folgende Fehlermeldung: TypeError: Cannot read properties of undefined (reading 'email'). Die Anfrage sendet JSON mit den Feldern username und mailAddress. Überprüfe das Validierungsschema in src/api/auth.ts und stelle die Feldnamen konsistent dar.“

Vier Regeln für eine erschöpfende Fehlerbeschreibung

  1. Erwartetes Verhalten (Expected Behavior): Was genau sollte bei einem erfolgreichen Szenario passieren?
  2. Tatsächliches Verhalten (Actual Behavior): Der exakte Fehlertext, der Statuscode oder ein unerwartetes Berechnungsergebnis.
  3. Schritte zur Reproduktion (Reproduction Steps): Welche Buttons wurden geklickt, welche Parameter wurden in der URL übergeben oder welcher Request-Body wurde gesendet?
  4. Kontext der Lokalisierung (Context & File Paths): Auf welcher Seite, Komponente oder Endpoint tritt der Fehler auf?

3. Analyse von Stack Traces und Entschlüsselung von Fehlermeldungen

Fehlermeldungen und Call Stacks können dem Agenten im Rohformat übergeben werden. Claude filtert selbstständig den Rauschpegel aus Systembibliotheken (node_modules) heraus und konzentriert sich auf den Code Ihres Projekts.

Übergabe des rohen Error-Stacks

text
I am getting this runtime error when rendering the user table: TypeError: Cannot read properties of undefined (reading 'map') at UserTable (src/components/UserTable.tsx:34:22) at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:15486:18) at mountIndeterminateComponent (node_modules/react-dom/cjs/react-dom.development.js:20103:13) What is causing this, and how should we properly handle loading and empty states?

Wie Claude solche Incidents analysiert

  1. Gezieltes Lesen: Öffnet src/components/UserTable.tsx in Zeile 34 mithilfe des Tools Read.
  2. Analyse der Datenquelle: Prüft Props und State-Hooks (useState, useQuery), um festzustellen, warum das Benutzer-Array zum Zeitpunkt des Renderings den Wert undefined hat.
  3. Sichere Korrektur: Fügt eine Prüfung auf Datenverfügbarkeit hinzu (Optional Chaining users?.map(...)), einen Ladezustand (Skeleton/Spinner) oder Standardwerte (users = []).

4. Arbeit mit Server-Logs und Analyse über CLI-Pipelines

Zur Untersuchung von Server-Ausfällen oder Fehlern in der Staging-Umgebung kann Claude Code direkt an die Standard-Ein-/Ausgabeströme (stdin/stdout) von Unix angebindet werden.

Log-Analyse über die Konsolen-Pipeline

bash
# Передати останні 100 рядків серверного логу в Claude для швидкої діагностики tail -n 100 /var/log/nginx/error.log | claude -p "Find critical errors and explain their root cause. Provide actionable fix instructions." # Пошук помилок із конкретного сервісу Docker docker logs --tail 200 api-service 2>&1 | claude -p "Analyze database connection failures and timeout exceptions."

Interaktive Untersuchung von Log-Dateien

In einer interaktiven Sitzung können Sie den Agenten auf gespeicherte Logs lenken:

text
Read logs/production-error.log and focus on entries with status 500 from the last two hours. Group related exceptions and trace which external service call failed.

Claude wird wiederkehrende Ausfallmuster hervorheben, Authentifizierungsfehler externer APIs oder die Erschöpfung des Datenbank-Connection-Pools identifizieren.


5. Strategisches Instrumentieren: Gezieltes Logging und Tracing

Die komplexesten Bugs sind sogenannte „Silent Bugs“, bei denen die Anwendung keine Exceptions wirft, aber inkorrekte Ergebnisse liefert (z. B. wird der Gesamtpreis einer Bestellung als $0.00 statt $42.50 berechnet).

In solchen Fällen wird die Methode des strategischen Instrumentierens angewendet.

Schrittweiser Untersuchungs-Algorithmus

  1. Aufgabe zum Platzieren von Logs vergeben:

    text
    The order total calculation is returning 0 for items with promo codes. Add targeted diagnostic logging to calculateOrderTotal and its call sites to log input arguments, discount factors, and return values.
  2. Bug in der App reproduzieren: Führen Sie eine Bestellung mit Promo-Code in der Testumgebung aus.

  3. Erhaltene diagnostische Logs zurück an den Agenten geben:

    text
    Here is the diagnostic log from the checkout attempt: [DEBUG] Item subtotal: 42.50 [DEBUG] Promo code applied: 'SPRING20' -> parsed discount: '0.2' (string) [DEBUG] Applying formula: 42.50 * (1 - '0.2') -> NaN -> coerced to 0 What went wrong?
  4. Fix und Aufräumen:

    Claude weist sofort auf das Typinkonsistenzproblem hin (String statt Number), korrigiert die Parsing-Funktion und entfernt eigenständig alle temporären Debug-Logs.


6. Behebung komplexer TypeScript-Typfehler

Fehler des TypeScript-Compilers können verwirrend sein, insbesondere bei der Arbeit mit Generics, Union Types oder verschachtelten Objekten.

Warum es gefährlich ist, den Compiler zu „stummschalten“

Viele Entwickler verwenden im Eifer des Gefechts Type Casting (as unknown as TargetType), was das Problem im Build-Stadium versteckt, aber zu Runtime-Crashes führt.

Anweisung an Claude für eine saubere Lösung

text
I am encountering this TypeScript compiler error in src/services/payment.ts:48: Type 'string | undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'. Fix this issue properly using strict type narrowing or safe fallback values. Do NOT use type assertions ('as') or 'any'.

Claude überprüft den gesamten Lebenszyklus der Variable und fügt eine korrekte Null-Check-Prüfung hinzu.


7. Automatisierte Reparatur von Builds und Tests im Loop

Eine der mächtigsten Funktionen von Claude Code ist die autonome Arbeit in der Schleife „Run → Analyze → Fix → Verify“.

mermaid
flowchart TD A["Команда: 'Fix all failing tests'"] --> B["Запуск npm test через Bash"] B --> C{"Всі тести пройдено?"} C -->|Так| D["Звіт про успішне завершення"] C -->|Ні| E["Аналіз помилок у звіті тестувальника"] E --> F{"Де баг: у коді чи в тесті?"} F -->|У коді| G["Виправлення бізнес-логіки"] F -->|У тесті| H["Оновлення застарілих очікувань тесту"] G & H --> B

Fertige Command-Templates zur Fehlerbeseitigung


8. Suche nach Performance-Bottlenecks und Resource-Leaks

Fehler sind nicht nur Crashs. Langsame Seitenladezeiten, übermäßige Datenbanklast und UI-Freezes sind kritische Performance-Defekte.

Anfrage für ein Performance-Audit

text
The /dashboard page takes over 6 seconds to load. Analyze the server-side data fetching and client components: 1. Check for N+1 query patterns in our Prisma calls. 2. Identify missing database indices on frequently queried foreign keys. 3. Look for unnecessary client component re-renders caused by unstable object references.

Wonach Claude bei der Performance-Analyse sucht

  • N+1 Queries: Ersetzung von iterativen DB-Abfragen durch eine einzelne Query mit IN Operator oder include Relation.
  • Memoization in React: Identifikation von schweren Berechnungen ohne useMemo oder instabilen Event-Handlern ohne useCallback.
  • Übermäßige Payloads: Hinzufügen von Pagination (limit/offset) oder selektiver Feldprojektion (select: { id: true, name: true }) anstatt das Laden der gesamten Tabelle.

9. Praktischer Workshop: Schrittweise Untersuchung eines realen Bugs

Betrachten wir ein praktisches Szenario: Benutzer beschweren sich, dass bei Anwendung eines 15%-Rabatt-Coupons im Warenkorb mit drei Artikeln der Gesamtbetrag falsch berechnet wird.

Schritt 1. Lokalisierung des Berechnungsmoduls

Öffnen Sie Claude Code und finden Sie das benötigte Modul:

text
Find where the cart discount calculation is implemented and inspect the file.

Claude nutzt Grep nach dem Wort discount und öffnet die Datei src/domain/cart.ts.

Schritt 2. Analyse des fehlerhaften Codes

typescript
// Знайдений фрагмент у src/domain/cart.ts: export function applyCoupon(total: number, discountPercent: number): number { return total - total * (discountPercent / 100); }

Auf den ersten Blick scheint die Formel korrekt. Aber in JavaScript führen Floating-Point-Operationen oft zu Rundungsproblemen: 100 - 100 * (15 / 100) ergibt 85.00000000000001, was den Payment-Gateway Stripe bricht, der ganze Cent-Werte erwartet.

Schritt 3. Formulierung der Aufgabe für Fix und Tests

text
In src/domain/cart.ts, the applyCoupon function causes floating-point precision issues that fail payment validation. Refactor it to calculate prices in integer cents, add rounding via Math.round, and create a comprehensive unit test in src/domain/cart.test.ts covering edge cases.

Schritt 4. Verifizierung des Ergebnisses

Der Agent korrigiert die Funktion:

typescript
export function applyCouponInCents(totalCents: number, discountPercent: number): number { const discountAmount = Math.round(totalCents * (discountPercent / 100)); return Math.max(0, totalCents - discountAmount); }

Danach startet Claude selbstständig npm test src/domain/cart.test.ts und bestätigt, dass alle Tests bestanden haben.


10. Schnelle Selbstüberprüfung und abschließender Debugging-Checkliste

Testen Sie Ihre Fähigkeiten im Umgang mit dem Debugging in Claude Code.

Kontrollfragen

Tipp

1. Was ist der effektivste Weg, um einen Server-Ausfall zu untersuchen, der auf dem Staging-Server auftrat?

Antwort: Übergeben Sie die letzten Log-Zeilen direkt im autonomen Modus von Claude Code über eine Konsolen-Pipeline: tail -n 150 /var/log/app.log | claude -p "Find errors and diagnose causes".

Tipp

2. Warum sollte man beim Beheben von TypeScript-Typfehlern dem Assistenten verbieten, den Operator as zu verwenden?

Antwort: Type Casting via as maskiert das Problem nur für den Compiler, schützt die App aber nicht vor Runtime-Crashs, wenn erwartete Daten fehlen. Fordern Sie stattdessen korrektes Type Narrowing oder Default-Werte.

Tipp

3. Wie organisiert man am besten die Behebung von zehn fehlgeschlagenen Tests nach einem Refactoring?

Antwort: Starten Sie Claude Code im Loop-Modus mit klaren Anweisungen: Tests ausführen, Fehler analysieren, veraltete Test-Erwartungen von echten Business-Logik-Defekten unterscheiden und den Durchlauf wiederholen, bis 100% Erfolg erreicht ist.

Checkliste für systematisches Bug-Hunting

  • Geben Sie dem Agenten die 4 obligatorischen Elemente: Erwartetes Verhalten, Tatsächliches Verhalten, Schritte zur Reproduktion und Dateipfade.
  • Übergeben Sie vollständige Stack Traces ohne Kürzungen – Claude findet die relevanten Codezeilen selbst.
  • Nutzen Sie Unix-Pipes (tail | claude -p) für die schnelle Diagnose von Server-Logs.
  • Fordern Sie sichere Typkorrekturen ohne Verwendung von forcierter Castings wie as any.
  • Beauftragen Sie Claude, Regressionstests für jeden behobenen Bug zu schreiben, um Rückfälle zu verhindern.
  • Bereinigen Sie temporäre diagnostische Logs vor dem Commit der Änderungen ins Repository.
Dieser Leitfaden ist komplett kostenlos. Wenn er Ihnen einen Abend erspart hat, können Sie das Wachstum des Projekts unterstützen.
Autor unterstützen