《Debugging —— The 9 Indispensable Rules of Finding Even the Most Elusive Software and Hardware Problems》(中文书名《调试九法》)中提到的九条debug准则

  • 理解系统:调试的前提是理解系统
  • 制造错误:要尝试将错误复现出来,而不是模拟错误。如果错误能被复现出来,可以大大提升我们调试的效率,验证我们的猜想。我们制造的错误要尽可能还原真实环境,否则可能会遗漏一些细节。
  • 不要想,而要看:调试bug不能靠猜测,而要观察实际发生的现象。在没有观察到现象之前,做出的假设可能和实际情况差了十万八千里。
  • 分而治之:这条准则有点像是算法中的二分法。Bug可能是出现在一个范围当中,debug时我们需要尽量缩小这个范围,有效的办法是先将问题出现的范围缩小到二分之一,然后是四分之一,直到找到最后出现的bug。
  • 一次只改一个地方:简单来说就是对照法,只改一个地方,问题解决了,那么说明问题就出来我们改的地方上面。然后如果改完了一个地方,问题没有解决,一定要还原自己的改动,因为不能保证自己的改动不会引起新的问题。
  • 检查插头:这条准则的意思是调试时要去确定信息的正确性。不要听从他人叙述,而要自己去检查,别人的叙述不一定是对的,要自己检测。
  • 保持审计追踪:记录调试的过程,有时bug隐藏在一些细节的地方,很不容易发现,所以如果实在是束手无策,可以将自己的调试过程记录下来,以便后续查阅细节,好记性不如烂笔头。
  • 获得全新的观点:和第一条准则可以结合起来看。要调试bug需要理解系统,如果我们不是这方面的专家,不妨去找到真正的专家,这样可以解决我们调试的时间,提升解决问题的效率。
  • 如果你不修复bug,它将依然存在:对于不是百分百出现的bug,不能默认它没有问题,要去找到它出现的根源,你不改,bug是不会自动消失的。修复bug以后要去验证,看bug是否修复成功。