diagnose

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

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

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

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

设计思路

diagnose 是 mattpocock 总结的「Bug 诊断六阶段」工作流,把模糊的「调一下」拆成结构化的从假设到根因的链路。先建 feedback loop,再下诊断结论——所有阶段都基于「能稳定复现」这个前提。

六个阶段(按作者原文)

  • Phase 1:Build a feedback loop 把 bug 变成一个可以一次次跑、跑得快、信号明确的 reproducer。没这个就不要往下走。
  • Phase 2:Reproduce 最小化复现路径——剥掉一切非必要因素,让信号清晰。
  • Phase 3:Hypothesise 列出假设并按可能性排序;问用户有没有自己的怀疑("jump to #3")或已经排除过哪些——便宜的 checkpoint,省时间。用户 AFK 就先按你自己的排序往下走。
  • Phase 4:Instrument
    • 每个 probe 都要对应一个具体假设。
    • 一次只改一个变量。
    • 工具优先级:debugger / REPL > 边界处的 targeted log >「全打 log 再 grep」(最次)。
    • 每条 debug log 都打唯一前缀(如 [DEBUG-a4f2]),结尾一次性 grep 清干净——untagged 留下,tagged 死掉。
    • 性能问题分支:log 通常不对路,先建立 baseline 测量(timing harness、performance.now()、profiler、query plan)再 bisect——先量后修。
  • Phase 5:Fix + regression test
    • 先写回归测试再写 fix——但只在「正确缝隙」存在时。
    • 「正确缝隙」= 测试覆盖到真实 bug 模式发生的那个调用点。
    • 如果只有过浅的缝隙(单 caller 写测试 / 单元测试无法复现 chain)——这本身就是发现:架构在阻碍 bug 被锁定,记下来交给 improve-codebase-architecture
    • 有正确缝隙时:把 minimised repro 变成 failing test → 看它失败 → 应用 fix → 看它通过 → 用 Phase 1 loop 在原始(未最小化)场景再跑一次。
  • Phase 6:Cleanup + post-mortem 完成清单:原始复现已不再复现 / 回归测试通过(或缝隙缺失被记下)/ 所有 [DEBUG-...]grep 清掉 / 临时 prototype 删掉或挪到明确的 debug 目录 / commit 或 PR 写明「最终被验证的假设」让下一个调试者受益。 再问一句:如果答案涉及架构改动(缺好缝隙、调用方纠缠、隐藏耦合),把这个交给 improve-codebase-architecture skill——但修完之后才提,因为现在你比开始时知道得多。

适合谁

  • 接到「线上偶现」类 bug 的工程师
  • 性能回归调查(务必走 perf 分支)
  • 想把调试经验做成可教学的教练 / Tech Lead

何时不该用

  • 一眼能看出来的低级错误——直接改
  • 没有可重复跑的环境——先去搭,否则 Phase 1 都过不去

配套

systematic-debugging(更基础的姊妹工作流)、improve-codebase-architecture(Phase 5 / 6 暴露架构问题时的下一站)、tdd(缝隙存在时的回归测试母法)。