# diagnosing-bugs ## What it does 给难查的 bug 一套诊断纪律:先造出「现在就为这个 bug 变红」的紧反馈循环,再二分定位、一次验一个假设、最小改动修复,最后补一条曾经红过的回归测试。 ## When to reach for it - 间歇失败、偶发问题,第一次看没头绪 - 已知两个好版本之间引入的回归(适合 git bisect) - 修过几次没修好的 bug 一眼可见的拼写/配置错误不需要它,直接修。 ## Common questions - **为什么不能先猜着改?** 没有红循环就没有验证手段,改了也不知道是不是这次改动生效。 - **复现不出来怎么办?** 提高复现率(缩小输入、调整时序、加观测),或用 git bisect 从版本维度定位,而不是盲上。 - **修完就完了吗?** 不,必须补一条回归测试,并证明修复前它是红的。 - **和 dev-test 的区别?** dev-test 管测试怎么写;本技能管「怎么找到 bug」。 ## It's working if - 动手改代码前,先给出了一条现在为红的命令 - 每次改动只变一个变量,并能说出上次结果的差异 - 修复结论包含根因 + 回归测试 + 「曾经红过」的证据