程序调试本质上便是一个反问题的求解过程。

一开始,有无数种关于bug成因的猜想与可能性摆在我们的面前,而真正导致当前现实错误的逻辑链条却只有一个。为此,只能不厌其烦地予以逐个验证和排查。

在debug工作开展的过程中,需要在代码中插入各种“探针”(probe),将程序内部和运行过程中的信息和数据展现在外(expose),从而增进我们对处于现实世界中的理论和算法的理解与把握。然而,这些信息与数据有时也并非轻易就能获得,这就需要搭建“脚手架”(scaffold)这样的额外设施予以辅助。