系统化调试:从症状建立故障树
约 14 分钟
调试不是随机换线和改代码。先精确描述症状、复现条件和最近变化,再列出能解释现象的假设,用成本低、区分度高的测量逐步排除。每一步都要减少不确定性。
症状不是原因
“温度跳变”是现象,可能来自电源跌落、接地、传感器通信、数组越界或换算。直接宣布“传感器坏了”是未经验证的假设。
电源优先
多个模块同时异常、复位或通信错乱时,先测电源和地,再看时钟、复位、总线和应用逻辑。底层公共依赖能解释更广症状,优先检查效率更高。
对半切分信号链
在链路中点注入已知输入或测输出,判断故障在前半还是后半,再继续二分。比从第一根线顺序猜到最后更快。
A/B与替换法
更换已知良好模块可提供证据,但一次只替换一项,并确认兼容性。换完正常不一定证明旧件物理损坏,也可能是接触在重插时恢复。
修复后做反证
重现原故障条件、重复多次,并撤销修复看问题是否回来(在安全范围内)。偶然一次正常不是根因闭环。
记录
故障日志包含版本、接法、触发步骤、读数、假设、操作和结果。失败尝试同样有价值,因为它排除了路径。
练习:针对“蜂鸣器响时控制器偶尔复位”画故障树,并设计前三个最有区分度的测量。
小纸条
调试时为什么要区分症状和原因假设?