女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

机器人算错了总分,女孩没有随机改代码,而是找到了一个最短的失败例子。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 保留失败输入2、3
  2. 写预期应为 5
  3. 逐步观察变量何时不对
  4. 修复再测确认原因

调试从可重复的错误开始。

缩小输入,记录执行状态,找到第一次偏离预期的地方。修复后再运行同一个失败例子,确认问题真正消失。

01调试第一步是什么?

先让错误稳定复现

记录一个明确输入,以及你得到的错误输出和正确答案。

02第二步:把失败输入变小

如果 1000 个数据会错,尝试缩成 10 个、5 个甚至 2 个,同时保持错误仍然出现。

03第三步:追踪程序状态

可以画表或临时输出:

步骤isum当前元素
1055
21127

04第四步:定位第一次变错的位置

不要只盯最后错误答案。

前面还正确某一步第一次错误重点检查这一段

05第五步:提出原因假设

例如:

  • 循环边界多走了一次?
  • 变量初值不对?
  • 类型溢出?
  • visited 标记太晚?

然后用输出或调试器验证,而不是直接乱改。

06修改后为什么还要重新测试?

因为修复一个输入后,可能又破坏其他情况。

至少要重新测试:

  • 原失败用例
  • 官方样例
  • 边界用例
  • 几个正常随机用例

07什么时候用调试器?

当程序状态复杂时,可以使用断点、单步执行、查看变量和调用栈。

你已经知道了什么

  • 调试要先稳定复现错误。
  • 缩小失败输入能降低分析难度。
  • 寻找“第一次出错的位置”比只看最终答案更有效。
  • 要提出假设并用证据验证。
  • 修复后必须做回归测试。

下一篇:怎样估算自己的程序会不会超时?

轮到你来试一试

程序偶尔错,发现失败输入后应先做什么?

想好了吗?点开看解释

保存输入和实际输出,再写下预期。这样以后每次修改都能重复验证。