- Startseite
- Skills
- Fehlerbehebung
- Stack-Trace-Fluesterer
Stack-Trace-Fluesterer
Jeden Stack-Trace entschluesseln — Ausfuehrungspfade verfolgen und Ursachen in tiefen Aufrufketten praezise lokalisieren.
Das Problem
Stack-Traces sind die DNA eines Fehlers, dennoch lesen die meisten Entwickler nur die erste Zeile und ignorieren den Rest. Tiefe Aufrufketten verweben Framework-Interna, Middleware-Schichten und eigenen Code — was es nahezu unmoeglich macht, Signal von Rauschen zu unterscheiden. Die eigentliche Ursache verbirgt sich oft 15 Frames tief, maskiert durch Abstraktionen, die man nie selbst geschrieben hat.
Der Prompt
Du bist ein Stack-Trace-Forensik-Experte. Analysiere diesen Stack-Trace mit einer schichtweisen Zerlegungsmethode:
STACK TRACE:
[vollstaendigen Stack-Trace hier einfuegen]
SPRACHE/RUNTIME: [z.B. Node.js 20, Python 3.12, Java 21, Go 1.22]
FRAMEWORK: [z.B. Express, Django, Spring Boot, Gin]
Fuehre diese Analyse durch:
1. **Frame-Klassifikation**: Kennzeichne jeden Frame als [EIGENER CODE] [FRAMEWORK] [RUNTIME] [DRITTANBIETER]. Trenne Rauschen von Signal.
2. **Ausfuehrungsnarrativ**: Erzaehle die Geschichte — rekonstruiere die Abfolge der Aufrufe, die zum Absturz fuehrten, in einfacher Sprache.
3. **Grenzanalyse**: Identifiziere, wo die Kontrolle von deinem Code zu externem Code wechselt und zurueck. Der Fehler liegt hoechstwahrscheinlich an diesen Grenzen.
4. **Ursachen-Hypothese**: Basierend auf dem Frame-Muster, schlage die 3 wahrscheinlichsten Ursachen vor, nach Wahrscheinlichkeit sortiert.
5. **Der entscheidende Frame**: Welcher einzelne Frame ist der tatsaechliche Ursprung des Fehlers? Erklaere warum.
6. **Fix-Strategie**: Biete einen gezielten Fix fuer die wahrscheinlichste Ursache, einschliesslich defensivem Code fuer die gebrochene Grenze.
7. **Regressionsschutz**: Schlage einen Test vor, der genau diesen Fehlerpfad abfangen wuerde.
Beispiel-Ausgabe
Frame-Klassifikation: 23 Frames gesamt — 4 EIGENER CODE, 11 FRAMEWORK (Express), 8 RUNTIME (Node.js)
Ausfuehrungsnarrativ: Request trifft /api/users → authMiddleware validiert Token → Controller ruft UserService.findById() auf → Mongoose fuehrt Query aus → Connection-Pool-Timeout nach 30s
Grenzanalyse: Die kritische Grenze ist UserService.findById() (eigener Code) → mongoose.Query.exec() (Drittanbieter). Kein Timeout konfiguriert.
Ursache: #1 (85%) Erschoepfung des Connection-Pools — kein Query-Timeout konfiguriert
Wann verwenden
Diesen Skill einsetzen, wenn ein Stack-Trace mehr als 5 Frames umfasst oder Framework-Grenzen ueberschreitet. Unverzichtbar bei der Analyse von Produktions-Abstuerzen, bei denen nur der Trace vorliegt und keine lokale Reproduktion moeglich ist. Besonders wirkungsvoll bei asynchronen Stack-Traces, die Kontext ueber Event-Loop-Ticks hinweg verlieren.
Profi-Tipps
- Immer den VOLLSTAENDIGEN Trace einfuegen — abgeschnittene Traces verbergen den wahren Ursprung. Das letzte “Caused by:” in Java oder das tiefste “at” in Node.js ist oft die tatsaechliche Ursache.
- Fehlermeldung UND Trace einbeziehen — die Meldung sagt WAS passiert ist, der Trace sagt WO und WARUM.
- Bei asynchronem Code Long Stack Traces aktivieren (
--async-stack-tracesin Node.js,tracemallocin Python), um die vollstaendige kausale Kette zu erfassen. - Mit einem funktionierenden Trace vergleichen — wenn ein Stack-Trace einer erfolgreichen Ausfuehrung desselben Pfads vorliegt, zeigt der Diff genau, wo die Ausfuehrung divergiert.