Skip to main content

debugging-expert

Expert systematic debugging and root-cause analysis. Trigger keywords: debug, bug, error, exception, crash, stack trace, reproduce, root cause, works on my machine, intermittent, heisenbug, regression, git bisect, race condition. Use to diagnose failures methodically, find the real cause, and stop guess-and-check fixing.

소스 정보

저장소
Miaoge-Ge/coding-agent-skills
최근 소스 활동
2026년 5월 31일 14:48
감지된 SKILL.md 언어
영어
스타
7
포크
2

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
debugging-expert
description
Expert systematic debugging and root-cause analysis. Trigger keywords: debug, bug, error, exception, crash, stack trace, reproduce, root cause, works on my machine, intermittent, heisenbug, regression, git bisect, race condition. Use to diagnose failures methodically, find the real cause, and stop guess-and-check fixing.
# Debugging Expert > Reproduce, then bisect. The bug is rarely where you think — follow evidence, change one variable at a time, and fix the cause (with a regression test), not the symptom. ## When to Use - A bug, crash, exception, or wrong output to diagnose. - Intermittent / "works on my machine" / heisenbug situations. - Locating which change introduced a regression. - Stuck guessing and editing code at random. ## When NOT to Use - Writing the regression test after diagnosis → `testing-expert`. - It's slow, not wrong → `performance-expert`. - Refactoring without a defect → `refactoring-expert`. ## The Method ### 1. Reproduce reliably first - Get a **minimal, deterministic reproduction** before changing anything — you can't confirm a fix for a bug you can't trigger. Pin inputs, environment, versions, and timing. - For intermittent bugs, find what increases the rate (load, ordering, specific data, concurrency) and amplify it; add logging to capture the failing case. ### 2. Read the evidence - Read the **entire** error and stack trace top to bottom — the root cause is often above the most obvious frame. Don't skim or assume. - Check what changed: `git log`/`git diff` since it last worked, recent deploys, dependency bumps, config/env differences. Inspect logs around the failure timestamp. ### 3. Hypothesize → predict → test - Form **one** hypothesis, predict exactly what you'd observe if it's true, then test that prediction. Confirm or eliminate before moving on. - **Bisect** the search space: binary-search the code path, the input data, or history (`git bisect`). Add assertions/logging at the boundary between "still correct" and "already wrong" to bracket the defect. - Question assumptions, including "this library/my framework can't be the problem." Verify, don't believe. ### 4. Fix the cause, prevent recurrence - Explain **why** it happened before patching. Fix the root cause, not the visible symptom. Add a test that fails without the fix, then look for sibling bugs of the same class. ## Tactics by symptom | Symptom | Tactic | |---------|--------| | Regression "used to work" | `git bisect` to the first bad commit | | Intermittent/race | add logging/IDs, stress ordering, run with race detector | | Wrong value somewhere | binary-search with assertions to bracket where state corrupts | | "Works on my machine" | diff env/versions/config; reproduce in a clean container | | Crash/exception | read full trace; reproduce the exact input | ## Common Mistakes - **Changing multiple things at once** → you won't know what fixed (or broke) it. - **Fixing the symptom** (swallow the exception, clamp the value) → bug resurfaces elsewhere. - **Skimming the stack trace** → miss the real frame and root cause. - **Debugging without a reproduction** → guessing; can't verify the fix. - **Trusting assumptions** ("the input is valid", "the lib is fine") → verify each. - **No regression test** after the fix → it comes back. - **`print` shotgun everywhere** → use targeted, bracketing logging or a debugger/breakpoints. ## Examples **Bisect a regression** ```bash git bisect start git bisect bad # current is broken git bisect good v1.4.0 # known-good tag # test each checkout, then mark good/bad; ~log2(N) steps -> first bad commit git bisect reset ``` **Bracket where state goes wrong** ```python assert invariant(state), f"invariant broke after step {i}: {state!r}" # move the assert earlier/later to corner the corrupting step ``` ## See Also - `testing-expert` — lock the fix in with a failing-first regression test. - `performance-expert` — same evidence-driven method, for "slow". - `github-master` — `git bisect`, `reflog`, and history forensics.
GitHub에서 보기