女孩和机器人一起思考

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

女孩让计分器从 3 加到 5,屏幕却显示 1。机器人建议先找“第一步不一样”的地方。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 预期3 加 2 得 5
  2. 实际程序做了减法
  3. 定位检查更新分数的语句
  4. 修复改后重新测试

Bug 是程序中的缺陷,可能使结果错误,也可能让程序无法运行。

调试时先写下预期,再观察每一步。越早找到偏离预期的位置,越容易理解原因。

01Bug 到底是什么?

Bug 通常指程序中的缺陷或错误,使程序出现不符合预期的行为。

02程序会有哪些错误?

编译问题

代码不符合语言规则。

运行错误

运行中出现异常或非法操作。

逻辑错误

程序能运行,但答案不对。

边界问题

只在特殊输入下出错。

03编译错误是什么?

int x = 10
std::cout << x;

第一行漏了分号,编译器会报告错误。错误行号是线索,真正原因有时在前一行。

04运行错误是什么?

程序已经启动,但运行过程中出现问题,例如非法内存访问、资源不足等。

05逻辑错误为什么最难发现?

if (score > 60) {
    std::cout << "及格";
}

如果规则是“60 分也及格”,这里应该写 >= 60。程序能编译、能运行,但规则写错了。

06调试是在做什么?

复现问题观察和定位修复并验证

调试不是随便改代码,而是用证据一步步缩小问题。

07怎样减少 Bug?

小步编写

一次增加少量逻辑。

及时测试

不要等全部写完。

测试边界

考虑 0、1、最大值等。

读懂报错

错误信息往往有关键线索。

你已经知道了什么

  • Bug 是程序中的缺陷或错误。
  • 常见问题包括编译错误、运行错误、逻辑错误和边界问题。
  • 能编译通过不代表程序一定正确或安全。
  • 调试要复现、观察、定位、修复并验证。
  • 良好的测试习惯能明显减少 Bug。

轮到你来试一试

把错误改好后,只看代码就结束,还是再跑一次?为什么?

想好了吗?点开看解释

再运行已失败的例子,并补上相关边界例子。这样能确认错误确实修好,也能发现修改引入的新问题。