Debugging Mastery Skill
Overview
Key Principle: Root cause over symptom treatment. Never be satisfied with making symptoms disappear. Understand WHY the bug occurred.
When to Use
MUST USE when:
- •Bug spans multiple files or components
- •Involves race conditions or timing issues
- •Has eluded initial investigation (>30 minutes)
- •Symptoms are intermittent or hard to reproduce
- •Previous fix attempts have failed
SHOULD USE when:
- •Bug is in unfamiliar code
- •Error messages are unclear or misleading
- •Multiple hypotheses are possible
The DEBUG Framework
D → E → B → U → G │ │ │ │ │ │ │ │ │ └─ GUARD: Fix and prevent regression │ │ │ └───── UNCOVER: Find root cause (5 Whys) │ │ └───────── BISECT: Narrow down location │ └───────────── EXPLORE: Gather evidence └───────────────── DEFINE: Expected vs Actual
| Phase | Purpose | Key Action | Output |
|---|---|---|---|
| D | Define | State expected vs actual | Problem statement |
| E | Explore | Gather evidence, logs, recent changes | Evidence list |
| B | Bisect | Narrow down with binary search | Suspect location |
| U | Uncover | Apply 5 Whys to find root cause | Root cause |
| G | Guard | Fix + regression test | Verified fix |
D - Define the Problem
State clearly: Expected vs Actual behavior, reproduction steps, environment.
E - Explore Evidence
Collect: Full stack traces, surrounding logs, recent changes (git log), affected scope.
B - Bisect and Narrow
Use binary search: Comment out code halves, use git bisect, create minimal reproduction.
U - Uncover Root Cause
Apply 5 Whys: Ask "why" until you reach an actionable fix point. Verify: "If we fix this, would the bug have been prevented?"
G - Guard Against Recurrence
Fix the root cause (not symptom), add regression test, check for similar patterns elsewhere.
Full framework details: reference/debugging-techniques.md
Bug Classification Quick Reference
By Reproducibility
| Type | Debugging Approach |
|---|---|
| 100% Reproducible | Standard: breakpoints, logging |
| Intermittent | Logging, state capture, timing analysis |
| Rare | Defensive logging, assertions, monitoring |
By Bug Type
| Type | Symptoms | Primary Technique |
|---|---|---|
| Logic | Wrong output | Code review, test cases |
| State | Corruption, unexpected values | State logging |
| Timing | Race conditions, deadlocks | Thread analysis |
| Resource | Leaks, exhaustion | Profiling |
| Integration | API mismatches | Interface comparison |
| Environment | "Works on my machine" | Config diff |
Full classification: reference/bug-classification.md
Core Techniques
| Technique | When to Use | Key Command |
|---|---|---|
| 5 Whys | Unclear cause | Ask "why" 5 times |
| Git Bisect | Regression | git bisect start/good/bad |
| Binary Search | Large codebase | Comment out halves |
| Isolation | Complex bug | Create minimal repro |
| Rubber Duck | Stuck | Explain code line-by-line |
| Printf Debug | No debugger | Strategic print statements |
Git Bisect Quick Reference
git bisect start git bisect bad HEAD git bisect good <known-good-commit> # Test and mark: git bisect good OR git bisect bad # Repeat until culprit found git bisect reset
Full techniques: reference/debugging-techniques.md
Root Cause Analysis
The 5 Whys Process
Problem: API returns 500 error ↓ Why? Database query failed ↓ Why? Connection pool exhausted ↓ Why? Connections not released ↓ Why? Exception handler missing close() ↓ Why? Template code lacked finally block ↓ ROOT CAUSE: Missing resource cleanup pattern
Stop when: You reach an actionable fix within your control.
Verify: "If we fix this, would the problem have been prevented?"
Full RCA guide: reference/root-cause-analysis.md
Subagent Integration
When to Escalate to debugger Subagent
- •Standard techniques haven't worked after 3 attempts
- •Bug requires multi-codebase analysis
- •Need advanced reasoning (Ultrathink methodology)
- •Complex distributed system issues
Handoff Protocol
Provide: Bug summary, DEBUG progress so far, files involved, hypotheses tested, specific request.
Iteration Tracking
The debugger subagent has a 5-iteration limit. Track attempts and escalate if needed.
Quality Checklist
Must Pass
- • Root cause identified (not just symptom)
- • Fix tested (reproduction steps no longer work)
- • Regression test added
- • No new bugs introduced
Should Pass
- • Similar patterns checked elsewhere
- • Documentation updated if process gap found
- • Code review complete
Anti-Patterns
| Anti-Pattern | Why It's Bad | Better Approach |
|---|---|---|
| Shotgun debugging | Random changes | Use DEBUG framework |
| Fixing symptoms | Bug will return | Find root cause |
| Skipping reproduction | Can't verify fix | Always reproduce first |
| Ignoring intermittent | Gets worse | Add logging, capture state |
| Debug in production | High risk | Reproduce locally |
| Assuming the obvious | Wastes time | Verify with tests |
| Not adding tests | Bug will recur | Always add regression test |
Full examples: reference/anti-patterns.md
Templates
| Template | Purpose |
|---|---|
| templates/debugging-session.md | Track entire session |
| templates/root-cause-report.md | Document RCA |
| templates/hypothesis-log.md | Track hypotheses |
Quick DEBUG Template
## Quick DEBUG **D - Define:** Expected: [what should happen] Actual: [what happens] Steps: [to reproduce] **E - Explore:** Error: [full message] Changed: [recent changes] Scope: [who's affected] **B - Bisect:** Last working: [commit/date] First broken: [commit/date] Narrowed to: [component/file] **U - Uncover:** Why 1: [symptom reason] Why 2: [deeper reason] Why 3: [root cause] **G - Guard:** Fix: [what to change] Test: [regression test]
Reference Documentation
- •reference/root-cause-analysis.md - 5 Whys, Fishbone, Fault Trees
- •reference/debugging-techniques.md - Binary search, git bisect, isolation
- •reference/bug-classification.md - Bug types and approaches
- •reference/anti-patterns.md - Common mistakes
Remember: A bug isn't fixed until you understand WHY it occurred and have prevented it from recurring.