8. 调试理论与实践

背景回顾:在快节奏的《操作系统》课中,插入一些 (重要得要命但与操作系统不完全相关的) 休闲内容。

本讲内容:调试理论:Fault, Error 和 Failure,以及我们应该如何应对程序里层出不穷的 bugs。

8.1 调试理论

调试理论给了大家在遇到 “任何问题” 时候 self-check 的列表:

  1. 是怎样的程序 (状态机) 在运行?
  2. 我们遇到了怎样的 failure?
  3. 我们能从状态机的运行中从易到难得到什么信息?
  4. 如何二分检查这些信息和 error 之间的关联?

看完之后的例子,你相信对这个过程会有更好的理解。

8.2 调试一切状态机

8.3 调试理论的应用

Take-away Messages

如果我们观察到软件发生了 “超出预期的表现”,我们需要理解的是我们的 “预期” 经历了需求 → 设计 → 代码 → Fault → Error → Failure 的漫长过程,其中的每一个过程多多少少都有些失控:我们的预期本身可能有误,或是对软件需要实现的需求有误解。而设计失误、编码错误最终反应到可观测的表现时,有时可能已经太晚了。因此,我们 “写好代码、做好测试、多写断言” 是十分重要的。