
一起动脑筋 · 先看一个小故事
机器人算错了总分,女孩没有随机改代码,而是找到了一个最短的失败例子。
把过程摊开来看
- 保留失败输入2、3
- 写预期应为 5
- 逐步观察变量何时不对
- 修复再测确认原因
调试从可重复的错误开始。
缩小输入,记录执行状态,找到第一次偏离预期的地方。修复后再运行同一个失败例子,确认问题真正消失。
01调试第一步是什么?
先让错误稳定复现。
记录一个明确输入,以及你得到的错误输出和正确答案。
02第二步:把失败输入变小
如果 1000 个数据会错,尝试缩成 10 个、5 个甚至 2 个,同时保持错误仍然出现。
03第三步:追踪程序状态
可以画表或临时输出:
| 步骤 | i | sum | 当前元素 |
|---|---|---|---|
| 1 | 0 | 5 | 5 |
| 2 | 1 | 12 | 7 |
04第四步:定位第一次变错的位置
不要只盯最后错误答案。
前面还正确→某一步第一次错误→重点检查这一段
05第五步:提出原因假设
例如:
- 循环边界多走了一次?
- 变量初值不对?
- 类型溢出?
- visited 标记太晚?
然后用输出或调试器验证,而不是直接乱改。
06修改后为什么还要重新测试?
因为修复一个输入后,可能又破坏其他情况。
至少要重新测试:
- 原失败用例
- 官方样例
- 边界用例
- 几个正常随机用例
07什么时候用调试器?
当程序状态复杂时,可以使用断点、单步执行、查看变量和调用栈。
你已经知道了什么
- 调试要先稳定复现错误。
- 缩小失败输入能降低分析难度。
- 寻找“第一次出错的位置”比只看最终答案更有效。
- 要提出假设并用证据验证。
- 修复后必须做回归测试。
下一篇:怎样估算自己的程序会不会超时?
轮到你来试一试
程序偶尔错,发现失败输入后应先做什么?
想好了吗?点开看解释
保存输入和实际输出,再写下预期。这样以后每次修改都能重复验证。