软硬件调试九法:第四条规则 分而治之

1、通过逐次逼近缩小搜索范围
        通过二分法,逐次缩小问题范围,在查找问题时,这个方法是唯一需要应用的规则,所有其它规则都是帮助你遵循这条规则。首先搜索前面1/2,如果有错,则再搜索前1/4,如果没错,则搜索范围就定在1/4-1/2之间,然后再次细分,几次之后就会找到问题。
 实际案例:有次程序运行反应很慢,特别是蜂鸣器响一次后,要几秒钟的时间,才能相应按键。因此就采用这个方法,很快确定慢是由等待蜂鸣器时间过长导致,从程序逻辑看,等待蜂鸣器结束函数并没有错误,但是其中while循环等待的蜂鸣器结束标志的变量,是在中断中处理的,该标志由于未定义为volatile类型,因此被编译器优化后,循环判断时只获取一次,所以只有循环延时超时退出时才结束。改为volatile类型后,问题解决。
2、使用易于查看的测试模式
    在存储器读写测试、通讯数据偶尔失败测试时,发送00 55 AA FF或者1到100连续数据比使用随机数据更容易发现错误。在测试彩色显示屏颜色失真时,采用红绿蓝黄等色条比图片要容易发现问题。

实际案例:有次使用TFT显示图片,黑白的显示正常,彩色的颜色失真,并且毛刺严重,以为显示屏有质量问题,使用彩色条后,发现显示和颜色和设定的不一致,仔细对比才发现驱动程序发出的16位数据,按照字节发送时,数据颠倒,所以调整后显示正常。

3、从有问题的一端开始搜索
      不要从正确的一端开始确认,正确的太多了,因此需要从错误的一端开始,然后向上游查找。
4、修复已知的bug
     有时我们很难相信一个系统有很多bug,这使得分而治之的隔离原则变得困难,因此如果确实查明了其中一个问题时,应该立即修复它,然后再查找其它问题。只有修复了已知的错误,才能集中精力查找其它问题,有时修复一个问题,另一问题也消失了,也就是两个问题时是一个bug。
5、首先消除噪声干扰
    在硬件中,噪音也可能因此各种难以查找的间歇性问题,因此查找问题前,应该首先注意短时脉冲干扰、时钟回波、模拟信号噪声、时序波动等不稳定因素;
     在软件中,不合理的多线程、意外的冲入例程、未初始化的局部变量都会导致系统产生很多随机行为,为工作带来很多麻烦。
      另外,技术人员很容易成为完美主义者,为了达到高质量,把所有不好的设计都修复一遍,可能会因为前面一个程序编写的看起来不好的程序代码就删掉重写,但是如果没有引起实际问题,最好还是保留他们吧,不要太过极端,你的精力在于找到bug并消除他们,这种修复耽误了真正的研究时间。

时间: 2024-09-27 03:36:03

软硬件调试九法:第四条规则 分而治之的相关文章

(知识分享)软硬件调试九法:第九条规则 如果你不修复一个bug,它将永远 存在

1.查证问题确已被修复 如果遵循了“制造失败”这条规则,就知道如何验证你确实修复了问题.无论问题和修复看起来多么明显,你都无法保证修复是有效的,直到做了测试并验证. 2.查证确实你的修复措施解决了问题 如果你取消这个修复,系统再次出现失败,再应用这个修复,问题消失,才能够证明你确实修复了问题.这样做的原因是,在调试期间,往往会改变一些不属于修复的地方,有时这些改变会隐藏问题,如果没有意识到这一点,发现测试起作用了,就高高兴兴的回家了,因为你做的修复和问题消失毫无关系,因此修复方案到达客户后,可能

软硬件调试九法:第五条规则 一次只改一个地方

1.隔离关键元素 就像小学生物课,考察阳光对植物生长的影响,则需要保持养分.灌溉.生长温度等完全一致,一个有阳光照射,一个没有阳光照射,这样才能比较出阳光对植物的生产的影响.bug查找过程也要如此,在查找一个具有多个参数的函数的计算错误时,固定其它参数,同时修改一个参数的输入值,验证输出结果是否正确,从而可以确定是哪个参数导致的计算错误,确定bug. 2.一次只改一个测试 软件工程师有时为了修复一个问题而修改了一个地方,但这个修改没有解决问题,而他又认为这不会产生影响,这是一个错误的假设,这个改

软硬件调试九法之总序

前言: 1.本文内容主要来源于书籍<调试九法:软硬件错误的排查之道>作者David J.Agans,属于读书笔记+个人体会. 2.本书介绍的方法的宗旨不是预防.保障和筛选,以预防bug的产生,而是如何找到bug并修复它们,如何高效的追踪和解决不易察觉的软硬件问题,不针对特定的平台.语言或者工具,不涉及晦涩的测试理论.3.你看过后,可能会咦一声,说“我一直都是这么做的!”,那么恭喜你,你是一个能高效解决问题的工程师. 书中提到了九条规则,可以说是总结的系统而全面,按照这些步骤和要求来做,对解决工

软硬件调试九法:第六条规则 保持审计跟踪

1.把你的操作.操作顺序和结果全部记录下来 要记录所做的事.做事的顺序.以及发生的结果,每次做完都要全部记录.就像调试硬件一样,必须指导每个步骤以及执行结果,才能确定下一步关注的重点. 2.要知道,任何细节都可能是重要的 有时bug报告可能就有一句简单的话,比如仪器显示出错了,或者仪器无法正常工作,这样的内容对测试人员没有实质帮助,除了记录发生的事情,还要注意的细节是问题的严重程度,以便判断是否需要立即修复. 3.把时间关联到一起 症状与调试信息关联起来是非常有用的,比如报告“蜂鸣器在测量结束时

软硬件调试九法:第三条规则 不要想而要看

凭空想象,问题的原因很多,实际的原因只有看了才能发现! 如果猜测失败是如何发生的,那么常常会修复一些不是bug的问题,不仅浪费时间.还会破坏其它地方,因此不要这样做. 在医学领域,有听诊器.抽血化验.X透视.B超等方法.同样 在软件中,观察的方法有设置断点.添加调试语句.监视程序值.以及检查内存等方法.硬件方法有通过示波器.逻辑分析仪.示波器等工具测试信号.时序和线路阻抗等方式.当错误的假设别否定后,找到bug的工作量和之前相比一样多,但是给你时间变少了,因此必须依靠下面的原则进行. 1.观察失

软硬件调试九法:第七条规则 检查插头

1.质疑你的假设 你十分运行了正确的代码?电源插头是否已插好? 比如网络连接失败了,是不是你不小心把网线接头踢掉了?比如汽车无法启动,是否油箱没油了? 有时我们看到一个问题,通常在某个特定位置看到了正确的问题,但是导致这个问题的却在上游或者底层驱动上,只是系统不具备正确操作条件时,出现了奇怪的表现. 2.从头开始 是否正确的对内存进行了初始化?电源开关是否已经打开? 比如如果你的程序序需要初始化内存.全局变量.局部变量,而你又没有这么做,那么情况会很糟,它会让你自己测试时是运行正确的,到客户演示

(知识分享)软硬件调试九法:第八条规则 求助他人, 获得全新观点

1.征求别人意见 我们都是普通人,对任何事情都有偏见或者思维定式,包括对bug隐藏在哪里的看法,这些偏见会导致我们无法看清实际情况.其它人则从另一个角度看问题(可能也是他自己的偏见),但是会找到新的方法,对你解决问题有很大启发. 2.获取专业知识 有时系统的某个部分的知识看起来很神秘,我们不必到学校学习一年,而是通过咨询专家快速掌握那些知识,任何情况下,专家都会比我们更理解系统,因此他们能知道查找问题的大致线路图,为你的搜索工作提供很好的提示. 3.听取别人经验 你可能经验不足,但是你想周围的人

《调试九法&mdash;&mdash;软硬件错误的排查之道》【PDF】下载

<调试九法--软硬件错误的排查之道>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196352 内容简介 <调试九法:软硬件错误的排查之道>主要介绍了调试方面的9条黄金法则,并结合实际的环境讲述了如何合理地运用它们.<调试九法:软硬件错误的排查之道>的内容没有针对任何平台.任何语言或者任何工具,讲述的重点是找到出错的原因并修复它们,高效地追踪和解决不易察觉的软硬件问题. <调试九法:软硬件错误的排查之道>

《调试九法:软硬件错误的排查之道》

调试九法概要思维导图 文字概要 理解系统 这是第一条股则,因为它是最重要的. 阅读手册.它会告诉你在使用除草机时,要在除草头上涂润滑油,这样除草绳就不会被烧化. 仔细阅读每一个细节.关于微处理器如何处理中断的详细信息就隐藏在数据手册的第37页. 掌握基础知识.点据本身就会发出很大的噪声. 了解工作流程.引擎的转速可能与轮胎的转速不同,这是由传动轴造成的. 了解工具.弄清楚体温计的哪一端才是用来测量体温的,弄清楚Glitch-O-Matic逻辑分析器的强大功能是如何使用的. 查阅细节.连爱因斯坦都