systematic-debugging:把結構化調試方法論寫進 Skill,讓 AI 排錯不再亂猜

前言

調試是開發者繞不開的日常。Bug 出現時,人類工程師往往有一套習慣:先復現、再縮小範圍、提出假設、用證據驗證,最後做最小修復。可當你把問題交給 AI 編程助手時,常見畫風卻是——Agent 連續改好幾處代碼、加一堆防禦性判斷,問題有時碰巧好了,有時卻引入新迴歸,你甚至說不清它到底查到了什麼。

systematic-debugging 正是針對這一痛點:它來自社區精選倉庫 awesome-cursor-skills,把「復現 → 隔離 → 假設 → 驗證 → 修復」這套結構化調試流程寫進 SKILL.md,教 Agent 按步驟排錯,而不是隨機改代碼碰運氣。對經常讓 Cursor、Claude Code 等工具幫忙查 Bug 的開發者來說,值得一裝。

這是什麼

systematic-debugging 是一個 Agent Skill,維護者爲 Spencer Paulyawesome-cursor-skills 項目,歸類在 Workflow(工作流)技能中。

它的 frontmatter 定義如下:

---
name: systematic-debugging
description: Structured debugging methodology — reproduce, isolate, hypothesize, verify. Covers git bisect, binary search, logging, and minimal reproduction.
user-invocable: true
---

一句話定位:用可復現的步驟約束 AI 的調試行爲——先拿到穩定復現路徑,再縮小故障範圍,形成可檢驗的假設,用最小實驗驗證,最後做最小修復並回歸測試。Skill 正文明確寫了 「Debug methodically instead of randomly changing code」(有條理地調試,而不是隨機改代碼),這正是它與普通「幫我修 Bug」提示詞的核心區別。

該 Skill 遵循通用的 SKILL.md 開放格式,可在 Cursor、Codex CLI、Claude Code 等支持 Agent Skills 的工具中使用;各工具的安裝目錄略有差異,下文會分別說明。

核心功能與亮點

五步調試流程

Skill 把調試拆成五個階段,Agent 應按順序推進,而不是跳步亂改:

1. Reproduce(復現)

在動手改代碼之前,必須先穩定復現 Bug:

  • 記錄觸發問題的精確步驟
  • 明確「期望行爲」與「實際行爲」的差異
  • 確認問題是否可穩定復現(而非偶發)
  • 記錄運行環境:操作系統、Node 版本、瀏覽器等

Skill 寫得很直白:「If you can’t reproduce it, you can’t fix it.」——復現不了,就繼續向用戶追問細節,不要憑空猜測。

2. Isolate(隔離)

把故障範圍一點點縮小,Skill 提供了三種常用手段:

二分搜索代碼庫:註釋掉一半邏輯,看 Bug 是否仍在;根據結果繼續在另一半里二分,直到定位到具體模塊。

Git bisect:適合「以前能用、某次提交後壞了」的場景,官方給出了完整命令流程:

git bisect start
git bisect bad          # 當前提交是壞的
git bisect good <sha>   # 這個提交還是好的
# Git 檢出中間版本 —— 測試它
git bisect good         # 或 git bisect bad
# 重複直到找到第一個壞提交
git bisect reset        # 完成後重置

按層隔離:從前端/後端、數據庫、API、單個組件等維度逐層剝離——查 Network 面板、直接 curl 接口、單獨渲染組件,判斷問題落在哪一層。

3. Hypothesize(假設)

要求 Agent 形成具體、可檢驗的假設,而不是模糊結論。Skill 給了正反例:

  • 差:「數據好像有問題」
  • 好:「userId 爲 null,因爲 auth 中間件沒有在這條路由上執行」

4. Test the Hypothesis(驗證假設)

最小實驗證明或推翻假設:

  • 在可疑位置加 console.log 或斷點
  • 檢查懷疑變量的實際值
  • 假設錯誤則回到第 3 步;假設成立則找到根因

5. Fix and Verify(修復與驗證)

  • 最小改動修復根因,而非掩蓋症狀
  • 用原始復現步驟確認 Bug 已消失
  • 檢查是否引入迴歸
  • 補寫一條能捕獲此類 Bug 的測試

場景化調試工具表

Skill 還整理了一張「場景 → 工具」對照表,幫助 Agent 快速選對手段:

場景 建議工具
「以前能用」 git bisect
「不知道這段代碼在哪跑」 在可疑函數入口/出口加日誌
「數據看起來不對」 逐步檢查每個變換環節
「只在生產環境失敗」 對比環境變量、查日誌、用生產數據本地復現
「偶發失敗」 排查競態、時序、未初始化狀態
「錯誤信息沒用」 在代碼庫中搜索該錯誤的拋出位置

常見 Bug 模式清單

Skill 列舉了 Agent 應優先留意的典型模式,包括:Off-by-one、Null/undefined、競態條件、React stale closure、類型強制轉換(== vs ===)、漏寫 await、本地與 CI/生產環境不一致等。這不是玄學清單,而是把人類調試經驗編碼成檢查項,減少 Agent 在常見坑上反覆繞圈。

四條鐵律

  • Never guess — always verify with evidence(不猜測,用證據驗證)
  • Fix the root cause, not the symptom(修根因,不修表象)
  • 15 分鐘無進展就退一步重新隔離
  • 記錄已嘗試的方案,避免重複失敗路徑

user-invocable: true 表示用戶也可以在 Agent 對話裏通過 /systematic-debugging 顯式調用,強制 Agent 走這套流程。

安裝與啓用

awesome-cursor-skills 的 Skills 均爲「複製即用」:SKILL.md 放進對應工具的 skills 目錄即可,無需額外依賴或編譯。

在 Cursor 中安裝

方式一:手動複製(推薦,便於團隊共享)

  1. 從官方倉庫獲取文件:
    https://github.com/spencerpauly/awesome-cursor-skills/tree/main/resources/systematic-debugging

  2. 在項目根目錄創建目錄並放入 SKILL.md

mkdir -p .cursor/skills/systematic-debugging
# 將 SKILL.md 複製到 .cursor/skills/systematic-debugging/SKILL.md
  1. 重啓 Cursor 或重新打開項目,Agent 會自動發現該 Skill。

根據 Cursor 官方 Skills 文檔,Cursor 會從以下位置掃描 Skill:

位置 作用域
.cursor/skills/ 項目級,可提交 Git 與團隊共享
.agents/skills/ 項目級,跨工具兼容
~/.cursor/skills/ 用戶級,所有項目可用
~/.agents/skills/ 用戶級,跨工具兼容

文件夾名建議與 frontmatter 中的 name 一致(小寫、連字符),即 systematic-debugging

方式二:從 GitHub 導入

Cursor 支持通過 Customize → Rules → Add Rule → Remote Rule (Github) 填寫倉庫地址導入;也可用內置 /migrate-to-skills 將舊規則遷移爲 Skill 格式。

在 Claude Code / Codex CLI 中使用

這類工具同樣識別 SKILL.md 通用格式。Claude Code 通常讀取項目下的 .claude/skills/.agents/skills/;Codex CLI 讀取 .codex/skills/ 等目錄(Cursor 文檔亦提到爲兼容會掃描這些路徑)。將 systematic-debugging 目錄複製到對應工具的 skills 根目錄即可,具體以各工具當前文檔爲準。

安裝完成後,可在 Cursor Settings → Rules → Agent Decides 區域看到已加載的 Skill;描述字段會幫助 Agent 判斷何時自動啓用。

典型用法示例

自動觸發

當你在 Agent 對話中描述 Bug,例如:

登錄後跳轉到個人頁,用戶名顯示爲空,但 Network 裏接口返回的數據是對的。

Agent 會根據 description 中的 reproduce, isolate, hypothesize, verify 等關鍵詞,自動匹配並加載 systematic-debugging,按五步流程推進:先讓你確認復現步驟與環境,再建議查 Network、隔離前端渲染層、提出「props 未傳遞」類假設,並用最小 log 驗證。

顯式調用

若你希望強制走結構化流程,在 Agent 輸入框輸入:

/systematic-debugging

然後描述問題。user-invocable: true 保證該 Skill 可作爲斜槓命令直接喚起,適合 Agent 此前「亂改一氣」、你需要它重新按方法論來一遍的場景。

Git bisect 協作示例

假設你知道 v1.2.0 正常、當前 main 分支異常,可以讓 Agent 在 systematic-debugging 指導下執行:

git bisect start
git bisect bad HEAD
git bisect good v1.2.0-tag
# 每一輪:運行測試或手動驗證 → git bisect good/bad
git bisect reset

Skill 要求 Agent 在 bisect 過程中記錄每次測試結果,最終 pinpoint 引入迴歸的提交,而不是直接在大範圍 diff 裏盲改。

與「最小復現」配合

隔離階段,Skill 強調構造最小可復現用例——去掉無關依賴和分支,只保留觸發 Bug 的必要代碼。這對 AI 尤其重要:上下文越小,Agent 越不容易被無關文件干擾,假設也更容易驗證。

適用場景與注意事項

適合誰、什麼場景:

  • 日常讓 AI 幫忙查 Bug,但受夠了「改十處碰運氣」
  • 迴歸問題、偶發問題、環境差異問題,需要 Agent 先復現再動手
  • 團隊希望把調試 SOP 寫進倉庫,新成員和 Agent 共用同一套流程
  • 技術負責人想降低 AI 引入靜默迴歸的風險

注意事項:

  1. Skill 是方法論,不是萬能補丁。它教 Agent 怎麼查,不替代你對業務邏輯的判斷;複雜分佈式系統可能還需結合鏈路追蹤、APM 等工具。
  2. 復現成本高的 Bug(僅生產、極低概率)Skill 也會建議追問細節和環境對比,Agent 仍可能無法一次定位,需要人工配合提供日誌與數據。
  3. 不要與「快速瞎改」混用。若同一會話裏你又提示「別管了直接全改一遍」,可能沖淡 Skill 約束;顯式 /systematic-debugging 效果更好。
  4. 版本隨倉庫更新。awesome-cursor-skills 持續維護,建議定期 git pull 或重新複製,以獲取新增的 Bug 模式或工具建議。
  5. 團隊規範可二次擴展。你可以在項目內 fork 該 Skill,加入團隊特有的日誌規範、測試命令或禁止操作(例如「未復現前禁止改生產配置」)。

小結

調試能力不會因爲是 AI 在執行就可以省略方法論。systematic-debugging 把復現、隔離、假設、驗證、最小修復這套工程師常識寫進 SKILL.md,讓 Agent 排錯時有章可循,少做無效修改,多留可追溯證據。對於 AI 編程工具用戶,這是一個輕量、零依賴、複製即用的 Workflow Skill,值得放進 .cursor/skills/ 試一輪。

官方 Skill 地址:
https://github.com/spencerpauly/awesome-cursor-skills/tree/main/resources/systematic-debugging

awesome-cursor-skills 項目主頁:
https://github.com/spencerpauly/awesome-cursor-skills

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜