mcpField
S
systematic-debugging

systematic-debugging

github.com/spencerpauly开发869557 次安装13 周前更新
代码仓库

关于 systematic-debugging

面向开发者和编码 Agent 的调试技能,将排查过程组织为复现、隔离、提出可检验假设和验证。它强调依据证据修复根因,而非随机改动代码。

主要功能

  1. 01稳定复现问题
  2. 02隔离代码路径与层级
  3. 03提出可检验的假设
  4. 04用小型测试验证假设
  5. 05检查修复是否引入回归

适用场景

  1. 01用 git bisect 追踪回归问题
  2. 02将故障定位到前端、后端或 API
  3. 03排查间歇性故障

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/spencerpauly/awesome-cursor-skills --skill systematic-debugging

安装后在 Claude Code 中输入/systematic-debugging确认已加载。

详细介绍

系统化调试

有条理地调试,不要随意修改代码。

流程

1. 复现

首先,可靠地复现问题:

  • 获取触发问题的准确步骤
  • 记录预期行为与实际行为
  • 确认问题会稳定出现(而非偶发)
  • 记录环境信息(操作系统、Node 版本、浏览器等)

如果无法复现,就无法修复。请索取更多信息。

2. 隔离

缩小问题所在的范围:

对代码库进行二分查找:

  • 注释掉一半系统代码 → 问题是否仍然存在?
  • 如果是,问题就在剩下的一半 → 重复操作
  • 如果否,问题就在被注释掉的一半 → 重复操作

Git 二分查找:

git bisect start
git bisect bad          # current commit is broken
git bisect good <sha>   # this commit was working
# Git checks out the midpoint — test it
git bisect good         # or git bisect bad
# Repeat until it finds the first bad commit
git bisect reset        # when done

按层隔离:

  • 问题出在前端还是后端?(检查网络面板)
  • 问题出在数据库吗?(直接查询)
  • 问题出在 API 吗?(使用 curl 请求端点)
  • 问题出在组件吗?(单独渲染该组件)
3. 提出假设

提出具体且可验证的假设:

  • “问题是由 X 导致的,因为 Y”
  • 不要说“数据有问题”
  • 好的例子:“userId 为 null,因为这个路由没有执行身份验证中间件”
4. 验证假设

编写尽可能小的测试,以验证或证伪假设:

  • 在疑似位置添加 console.log 或断点
  • 检查疑似变量的值
  • 如果假设不成立,根据新信息回到第 3 步
  • 如果假设成立,就找到问题了
5. 修复并验证
  • 应用最小化修复
  • 验证原先的复现步骤不再触发问题
  • 检查是否引入回归问题——修复是否破坏了其他功能?
  • 编写一个能够捕获此问题的测试

调试工具

场景工具
“之前还能正常工作”git bisect
“我不知道这段代码在哪里运行”在可疑函数的入口和出口添加日志
“数据看起来不对”检查每个转换步骤中的数据
“只在生产环境中失败”比较环境变量、检查日志,并尝试在本地使用生产数据复现
“问题偶尔出现”检查竞态条件、时序问题或未初始化的状态
“错误消息毫无用处”在代码库中搜索抛出该错误的位置

常见问题模式

  • 差一错误:数组索引、分页、日期范围
  • Null/undefined:缺少可选链、状态未初始化
  • 竞态条件:异步操作的完成顺序与预期不符
  • 过时闭包:React useEffect/useCallback 捕获了旧值
  • 类型强制转换:== 与 ===,字符串与数字的比较
  • 缺少 await:忘记在异步函数上使用 await
  • 环境不一致:由于环境变量或版本不同,代码在本地可运行,但在 CI/生产环境中失败

规则

  • 绝不猜测——始终用证据验证
  • 修复根本原因,而不是表面症状
  • 如果 15 分钟没有进展,就停下来重新隔离问题
  • 记录尝试过的方法,避免重复无效的做法

评论

支持 Markdown