2026-03-15

调试的艺术:从现象倒推根因

#debugging #method #thinking

新手改 bug,靠的是"试试看"。老手改 bug,靠的是"先想清楚"。两者花的时间,差的不止一倍。

先别动代码

看到报错第一反应去翻代码,往往会越改越乱。先停下来,把现象写下来:什么输入、什么环境、什么预期、实际是什么。描述清楚的那一刻,答案常常自己浮现。

把调试当实验

每一个判断都是一条假设,每加一行日志都是一次实验。好实验的标准是:它能证伪某个假设。如果怎么跑结果都一样,那这次实验没用。

# 不要 print("here") 十遍
# 要打印能区分假设的值
print(f"user={user.id} role={user.role} cached={cached}")

二分法永远有效

范围太大就切一半:注释掉一半逻辑,看问题在不在。在,就缩进这一半;不在,就去看另一半。十次以内能定位到具体一行。这比盯着屏幕猜强一百倍。

修完别急着走

真正值钱的一步是复盘:这个 bug 本可以更早暴露吗?能在测试里拦住吗?能加一个断言防止复发吗?

一个 bug 最好的归宿,是让下一个同类 bug 无处藏身。

心态

调试不是和机器作对,是和自己的假设作对。你越是想证明"我的代码没错",就越慢;坦然接受"我错了",反而最快。

← 返回文章列表