zoukankan      html  css  js  c++  java
  • 软硬件调试九法:第三条规则 不要想而要看

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

    1、观察失败

      发现bug时,看到是其实是失败的结果,你必须仔细观察,找到足够多的细节,才能调试它。如果不留意发生的全过程,可能导致你曲解很多问题,修复错误的地方,更糟的是可能由于时序改变,真正问题被隐藏起来,导致误以为bug已修复。

    2、查看细节

      典型情况是,每次为了发现故障而观察系统,都会了解更多与失败有关的信息,这将有助于你确定下一步观察哪些地方以获取跟多细节,这样才能根据细节查看设计并找到问题原因。对细节的观察要一直持续,直至可以锁定的问题的原因在几种可能性之内。这个过程中,经验会起到帮助作用,经验会告诉你什么时候问题原因已被锁定,并做一个好的调试人员。 比如偶尔出现的bug,如果看到底层失败细节后,当认为bug已修复后,就很容易证实确已修复,而不必依靠统计数据,就可以看到问题不在发生。

    3、植入插桩工具

      开发过程中,可以采用软件单步跟踪、插入断点的方式进行调试;发行后,就只能在监视器中输入有意义的变量,以便运行时观察,在任何状态,都应该开启一个调试窗口,并且让代码输出状态信息,在PC、服务器中,往往利用运行日志。在嵌入式系统中,通常使用串口和PC机通讯,利用上位机监控运作状态。 最好的方法是,从开始设计就考虑调试的问题,把插桩作为产品需求一部分。这有助于后期的调试、在思考哪里需要插桩时,还有助于更好的设计系统并避免bug。 无论设计时考虑的如何周到,开始调试后总会有些无法预料的情况。因此,不必担心,只需在必要时对系统进行插桩即可,需要注意的是,植入插桩工具后,要使失败再次发生,而且确保对问题没有影响,找到问题并解决后,要清除插桩,以便不影响最终产品。

    4、添加外部插桩工具

      当调试硬件时,可以使用万用表、示波器、逻辑分析仪、频谱仪等其它仪器观察硬件。需要注意的时,所有仪器必须要有足够的速度和精确度,以便能够测量到错误,比如如果使用带宽200M的示波器,就无法观察230M的信号饱和变形的问题。

    5、不要害怕深入研究

      如果代码有bug,为了修复它,需要重新构建软件,首先构建一个调试版本,添加调试语句以查看需要查看的的参数,修复后,使用#ifdef 标记所有调试语句并重新交付产品代码。

    6、注意海森堡效应

      海森堡效应,在量子领域为测不准原理,因此任何插桩都可能影响原有的系统,比如示波器的探针增加了电路的电容,不同的软件版本,可能软件运行时间和规模会有不同,打开机箱盖子,会改变内部零部件的温度等。因此必须在插桩后,使系统再次失败,以确保未被海森堡效应所困。

    7、猜测只是为了确定搜索的重点

       在理解了系统的基础上,你的猜测可能很接近事实,这是好事,这样可以确定搜索到重点,但是在尝试修复前,仍需再次看到失败,以便确认猜测是正确的。但是不要过分相信猜测,它往往会把你带偏方向,引入歧途。 例外的情况是,如果某些问题比其它问题容易出现,或者容易修复,则首先检查这些问题。比如灯泡不亮了,应该首先更换灯泡,如果好了,说明问题解决了,否则再检查开关、再检查线路是否老化。

  • 相关阅读:
    hdu1251统计难题(trie树)
    线段树
    poj2632Crashing Robots
    UVA10194 Football (aka Soccer)
    hdu1166敌兵布阵(线段树)
    【洛谷P3810】【模板】三维偏序(陌上花开)
    【洛谷P2480】古代猪文
    【洛谷P3449】PALPalindromes
    【洛谷P4777】扩展中国剩余定理(EXCRT)
    【洛谷P2421】荒岛野人
  • 原文地址:https://www.cnblogs.com/shuolang/p/5300474.html
Copyright © 2011-2022 走看看