systematic-debugging

工程开发 社区 @obra
信任分
88/100
兼容 Agent
1
速查档案 只列事实:领域、Agent、信任分、作者、原文章节。装与不装请看下方作者解读。
领域
工程开发
兼容 Agent
Claude Code
信任分
88 / 100 · 社区维护
作者 / 版本 / 许可
@obra · 未声明 license
安装命令数
1 条

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗

解读由编辑根据原文凝练而成,命令、链接、术语均与作者原文一致;想看完整论述请切到右侧

systematic-debugging 解决一个反直觉的事:调 bug 最快的办法不是乱试 fix,而是先把根因弄清楚。作者把它写成一条铁律——「NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST」——并把全过程拆成 4 个 phase,每个 phase 必须做完才能进下一步。

设计思路

作者的观察是:随机 fix 浪费时间还会引入新 bug;快速补丁掩盖根本问题。违反这个流程的字面意思 = 违反 debug 的精神。这是一种刻意的反应式工程纪律——越紧急越要走流程,因为乱猜在压力下永远比系统化慢。

何时用

任何技术问题:测试失败 / 生产 bug / 异常行为 / 性能问题 / 构建失败 / 集成问题。尤其在:时间压力下(着急让人想猜)/「就改这一下」很显然时 / 已经试了多次 fix 都不对 / 上一次 fix 没解决 / 你并未完全理解这个问题时——千万不要跳过。不要因这些理由跳过:bug 看起来简单(简单 bug 也有根因)/ 着急(赶反而要返工)/ 老板要立刻修好(系统化反而比 thrashing 更快)。

四个 phase

Phase 1 Root Cause Investigation:① 认真读 error message——不要跳过 warning,stack trace 完整读,记下 line number / file path / error code,错误本身常常就含答案;② 稳定复现——能不能可靠触发?步骤是哪些?每次都犯吗?复现不出 → 收集更多数据,不要靠猜;③ 看最近改了什么——git diff、最近 commit、新依赖、配置变化、环境差异;④ 多组件系统先收证据再 fix——CI → build → signing 或 API → service → DB 这种链路,给每个组件边界加 diagnostic instrumentation(log 进入 / 离开数据 / 校 env / 校状态),跑一次拿到「在哪一层断的」证据,进那一层调查;不要一上来就猜哪一层错了。Phase 2 假设、Phase 3 验证、Phase 4 修复——本技能的细节都拒绝在没有 evidence 时跳到 fix。

红线(Red Flags)

出现以下信号要立刻停手回流程:开始想「我先试这个 fix 看看」/ 想用 try/except 把异常吃掉而不是修因 / 想加 if foo: skip 绕过失败 case / 你会跟 your human partner 说「就这一次破例」——这些都是 rationalization。

适合 / 不适合

适合:任何「你不完全理解为什么会这样」的 bug;不适合:你已知在 reproduce 阶段卡住又不想花时间 reproduce——那就先去解决 reproducibility 而不是上来 fix。

配套

debugging-with-humility(调 bug 时的语言纪律)、diagnose(从单条 issue 进入根因调查)、verification-before-completion(修完前的验证)、receiving-code-review(同一份反对表演式语言的精神)。