Open supergem3000 opened 7 months ago
8. 调试理论与实践 (jyywiki.cn) 机器永远是对的,未测代码永远是错的。
需求->设计->代码->Fault(bug)->Error(程序状态错)->Failure Fault:程序bug;Error:运行中产生的错误状态;Failure:观测到的错误,如timeout、crash等。 调试困难的原因,我们只能看到Failure,却很难找到bug在哪里。
调试理论:如果我们能判定任意程序状态的正确性,那么给定一个 failure,我们可以通过二分查找定位到第一个 error 的状态,此时的代码就是 fault (bug)。 为什么调试理论看起来很没用?因为判定程序状态的正确性非常困难。
实际中的调试:观察状态机执行(trace)的某个侧面。
写好读、易验证的代码。在代码中添加更多的断言 (assertions)。 断言的意义:把代码中隐藏的 specification 写出来
本章节理论内容不多,我总结的很少。主要还是靠开发经验。
调试理论
需求->设计->代码->Fault(bug)->Error(程序状态错)->Failure Fault:程序bug;Error:运行中产生的错误状态;Failure:观测到的错误,如timeout、crash等。 调试困难的原因,我们只能看到Failure,却很难找到bug在哪里。
调试理论:如果我们能判定任意程序状态的正确性,那么给定一个 failure,我们可以通过二分查找定位到第一个 error 的状态,此时的代码就是 fault (bug)。 为什么调试理论看起来很没用?因为判定程序状态的正确性非常困难。
实际中的调试:观察状态机执行(trace)的某个侧面。
调试理论:应用
写好读、易验证的代码。在代码中添加更多的断言 (assertions)。 断言的意义:把代码中隐藏的 specification 写出来