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

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

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

小夜