一次只改一个变量
约 12 分钟
开始搭建和调试。这一节只讲一条纪律,但它是整个工程调试的基石。
核心纪律:一次只改一个变量
不工作时,人的本能是一次改三处:换根线、改段代码、再加个电容,然后上电看看。
如果好了,你不知道是哪一处起了作用。
如果还是坏的,你不知道刚才那三处有没有引入新问题。
结果:你在增加系统的复杂度,而不是减少它。
正确的调试循环
① 提出一个假设(我认为问题是 X)
② 设计一个能验证它的最小改动
③ 只做这一个改动
④ 观察结果
⑤ 记录:假设对了还是错了
⑥ 回到 ①
第⑤步很多人不做,但它决定了你是在「排查」还是在「乱试」。
分段验证:从最小系统开始
不要全部搭完再上电。 按这个顺序,每段验证通过再加下一段:
| 阶段 | 搭什么 | 验证标准 |
|---|---|---|
| 1 | 只有电源 | 各路电压正常(对照测量图 TP1、TP2) |
| 2 | + 单片机 | 能烧录、LED 按预期闪烁 |
| 3 | + 传感器 | 串口打印的读数随实际变化(用手捂/沾水试) |
| 4 | + 驱动电路(不接负载) | 控制脚电平按预期变化 |
| 5 | + 执行器(水泵/电机) | 完整功能 |
| 6 | 异常测试 | 故意制造异常,看保护有没有生效 |
第 6 阶段最容易被跳过,但需求里写的异常处理,不测就等于没做。
故意制造异常的方法:
- 拔掉传感器 → 看会不会误动作
- 水箱放空 → 看水泵会不会空转
- 中途断电再上电 → 看能不能正常恢复
- 手动堵住水泵 → 看会不会一直堵转
调试记录表
【阶段】__ 【本次假设】____________
【改动】(只写一处)____________
【结果】□好了 □没变 □变差了 □出现新现象:____
【结论】假设 □成立 □不成立
【下一步】____________
「变差了」这一项一定要记:它说明你的改动引入了新问题,应该先撤销回去,而不是继续往上叠。
三个实用的调试技巧
① 二分法
系统有 10 个环节且不知道哪里坏,先测第 5 个——一次排除一半,最多 4 次就能定位。
比从头挨个测快得多。
② 替换法
怀疑某个模块坏了,换一个确定是好的上去。如果好了,确诊;如果没好,说明问题不在这里。
注意:一次只换一个。
③ 最小复现
把系统裁剪到「还能出现这个故障的最简形式」。
整个系统会重启 → 去掉传感器还重启吗?→ 只留单片机和电机还重启吗?
裁剪到最小,原因往往就显而易见了。 这也是软件调试的通用方法。
什么时候该停下来
如果调了两小时没进展:
- 休息十分钟(真的有用,人在疲劳时会反复测同一个点)
- 回去看需求和图——是不是设计本身就有问题?
- 向别人复述一遍——很多问题在复述到一半时自己就想通了
练习:按 1–6 的阶段搭建你的系统,每个阶段填一次调试记录表,第 6 阶段至少测试三种异常。
小纸条
调试时为什么必须「一次只改一个变量」?「最小复现」是什么方法?
登录 后可看答案