新手改 bug,靠的是"试试看"。老手改 bug,靠的是"先想清楚"。两者花的时间,差的不止一倍。
先别动代码
看到报错第一反应去翻代码,往往会越改越乱。先停下来,把现象写下来:什么输入、什么环境、什么预期、实际是什么。描述清楚的那一刻,答案常常自己浮现。
把调试当实验
每一个判断都是一条假设,每加一行日志都是一次实验。好实验的标准是:它能证伪某个假设。如果怎么跑结果都一样,那这次实验没用。
# 不要 print("here") 十遍 # 要打印能区分假设的值 print(f"user={user.id} role={user.role} cached={cached}")
二分法永远有效
范围太大就切一半:注释掉一半逻辑,看问题在不在。在,就缩进这一半;不在,就去看另一半。十次以内能定位到具体一行。这比盯着屏幕猜强一百倍。
修完别急着走
真正值钱的一步是复盘:这个 bug 本可以更早暴露吗?能在测试里拦住吗?能加一个断言防止复发吗?
一个 bug 最好的归宿,是让下一个同类 bug 无处藏身。
心态
调试不是和机器作对,是和自己的假设作对。你越是想证明"我的代码没错",就越慢;坦然接受"我错了",反而最快。