读书笔记——调试九法

  这本书不仅讲了软件调试,也讲了硬件调试,这不仅是程序员,也是工程师非常有用的技能。我粗略得读过这本书之后,结合自己这次学软件工程,以及以前做上电子设计实践2做风力摆的经历,感触颇深。

根据作者26年的系统设计和调试经验,他发现了两件事情:

1)如果查找一个bug花费了大量的时间,那么原因可能是忽略了某个最基本的、最重要的规则,一旦应用了那条规则,很快就会找到问题。

(2)擅于快速调试的人已经深刻理解了这些规则,而那些很难理解或使用这些规则的人则很难找到bug。

这九条规则是:

1>理解系统

<2>制造失败

<3>不要想,而要看

<4>分而治之

<5>一次只改一个地方

<6>保持审计追踪

<7>检查插头

<8>获得全新观点

<9>如果你不修复bug,它将永远存在

我对其中的几条规则,结合我以前做硬件和软件的经历,进行分析

(1)理解系统

  这是最重要的一条规则,所以放在第一条。你必须理解系统的工作原理及它是如何设计的。在某些情况下还得知道为什么这样设计。

  上学期我们做风力摆,卡住了很久做不出来的原因。就是因为没有理解风力摆这一受控对象的对象建模(俯仰角,翻滚角等),以及没有很好地理解PID算法。如果你没有理解系统的某个部分,那么这通常是出问题的地方。

  理解系统最基本的办法就是阅读手册。产品说明书、官方的技术支持文档等,都归属于手册这一含义。仔细阅读手册,解决问题的关键隐藏在细节中,遇到问题不要盲目地相信你的记忆能力,该翻手册时就要翻。通过阅读手册掌握基础的知识,了解工作的流程,这样就能迅速定位错误是由哪个步骤造成的。所以,夯实基础十分重要。

(2)制造失败

当你决绝了一个问题,记住这次经历,将你解决问题的工具保留下来,保不准下次就得用上。

很多错误其实是同一种错误,当你犯了这些错误,记住它,就能减少下次犯错的几率。

除此之外,查找那些不受你控制的条件(导致间歇性的失败),例如未初始化的数据,随机数据输入,多线程同步和外部设备。

(上学期数据结构大作业很多就是因为数据没有初始化)

(3)不要想,而要看

亲眼查看失败,留意实际情况发生的过程,不要想当然的凭想象猜测。通过观察,让你能尽量缩小范围至几种可能性之内。你可以利用工具去观察错误,但必须知道,工具也会影响要测试的对象。

(4)分而治之

这是调试的核心。类似于二分查找法,根据错误特征反复将问题分成好的一般与坏的一半,来缩小搜索范围,进一步研究有问题的一半。当错误的特征不明显时,可以尝试放大这个特征。查找问题时从有问题的分支上溯查找。bug之间相互保护,相互隐藏,所以出现多个bug时,修复已知的bug,解决一个,往往连带着解决了多个。

(5)一次只改一个地方

改动后不能解决问题要还原后再进行下一次改动,因为改动了后,环境条件也会发生改变,会影响错误的查找。每次改动专注于一处地方。你要能明白正常情况下的结果,与你遇见的情况做对比。在改动时,要隔离关键因素以确保每次改动只改变了一个。

(ps:其实你会发先 (4)也是一次只改一个地方的原因,因为你修复了一个bug,往往就连带着解决了其他bug,上学期做数据结构大作业的时候,尤其有这种感觉,往往是修复了一个bug,就解决了很多bug,因为bug是会耦合的)

<8>获得全新的观点

放下无谓的自尊向他人,最好是专家求助,他会给你带来新的观点。在咨询时,报告问题的症状而不是你认为的原因(理论),这会将他人陷入你的固定思维中。学会利用工具搜索问题,比如Google。向小黄鸭倾诉你的想法,以理清你的思路。有一个教训就是当时做电设请教助教的时候,就是把自己认为的原因告诉他。但实际上这样并不好。但是话说回来,如何利用工具搜索解决问题,我好像这方面的能力也不太强。

原文地址:https://www.cnblogs.com/ustcldq/p/9119269.html