调试的九个黄金准则---UNDERSTAND THE SYSTEM(二)

3.知道什么是合理的

       当你环视整个系统 的时候,你必须清楚正常情况下系统是如何工作的.如果你不知道特定处理器的字节序,你就不清楚你程序中的超过一个字节的数据是如何存放的.如果你不知道缓存是做什么的,你就会困惑你的内存写操作为什么没有立马执行.如果你不知道总线的三态(高电平,低电平,高阻抗),你可能会认为信号可能有问题.关于正常工作时的知识可以帮助你注意到不正常的情况.


    你也不得不去了解下你所在技术领域的基础知识.如果我不知道时钟信号和地址信号是做什么的,即使我从头到尾读一边接口芯片手册也不会意识到那个中断问题.

实例:

我的一个同事遇到了一个bug,那就是处理器有时会崩溃.但是这只是一个很简单的处理器,不带操作系统,没有虚拟内存.他们之所以发现系统崩溃是因为程序没有定时喂狗导致看门狗复位.这个软件工程师一直尝试定位程序是在哪个地方崩溃的.一个硬件工程师给了建议,"嘿 你在崩溃的地方前面设置一个断点,但断点被触发时你看下当时发生了什么".很显然,这位硬件工程师没有理解,如果我知道在哪放断点,我就已经找到了程序在哪崩溃的.


4.熟悉路线图

如果你想到达bug的藏身之处,你最起码得熟悉这一块的地理分布.如果你想分割系统以便孤立出有问题的模块,你起码得熟悉这个系统的架构模块分布.起码,你得在顶层知道系统的框图,各个模块的作用,各个接口是做什么的.


你需要了解什么数据在你的API接口和模块之间传递,每一个模块和程序又对这些数据做了什么处理.如果你的系统遵守模块化设计原则,这是很容易就能理清的.


有时,不可避免,你系统存在黑盒子模块,你看不到它的内部.但是至少你应该去了解这个黑盒子是如何和系统的其他模块进行交互的.这样你可以确定问题是发生在黑盒子内部还是外部.如果发生在外部,你就可以修正它.如果是发生在内部,那就替换它吧.


5.熟悉自己的工具

在观察系统时,工具就是你眼睛和耳朵的延伸.你必须选择正确的工具,采用正确的使用方法,然后合理的解释得到的结果.很多工具都很强大的功能,但是往往只有精通这些工具的人才熟悉这些功能.你越熟悉工具,就越能容易的使用他们.花点时间去熟悉自己的工具,你得到的收益要远远的大于你的付出.


工具也不是万能的,所以请明白你工具的限制.每一个工具都有其擅长的地方,也有其力不能及的地方.


6.look it up

实例:

一个 初级工程师junior设计了一个电路,其中使用到了一个叫1489A的芯片,这个芯片负责从线路上接收信号.一个高级工程师senior正好看到了这个设计,他给出了一个建议,"你不应该选用1489A,应该采用1489". 初级工程师问原因,高级工程师说1489A会发热的很厉害. 像所有的年轻人一样,junior决定决定去理解设计图来找出为什么着一个芯片会发热的厉害.

他发现这两个芯片的唯一区别是芯片的内部阻抗不一样.1489A这个新的芯片降低了内部阻抗,以便减少在线上引入的噪声问题.但是由于阻抗减少,在其两端加大一点的电压就会导致发热厉害(U*U/R).但是junior的电路设计的原因,不会在芯片上引入过高的电压,所以junior没有采用senior的建议.事实证明,芯片并没有严重的发热问题.


几个月后,junior查看同组人以前的电路设计.他发现似乎芯片的引脚使用不正确.他翻阅芯片手册,验证了自己想法.细细的分析下,也正是这个错误的设计导致1489发热,1489A发热的更厉害.


在上面的例子中,有两个地方违反了"理解系统"这个原则.第一,在设计这个系统时,最初的设计者并没有查看手册以确定他们使用了正确的引脚连接方式.第二,senior没有出试着理解系统找出发热的原因,结果导致整个团队都默认了这样一个事实:不要采用1489A,新的芯片发热更厉害.但是junior,不相信原理图,通过查找资料来证实自己的猜测,最终找出了发热的原因.


不要瞎猜,查资料来验证.详细的信息肯定自己或他人记载在某一个地方,不要相信自己的记忆,应该翻出来,核实一下.


这就是九个黄金准则之一:理解系统.下面是要点:

• Read the manual. 
• Read everything in depth.
• Know the fundamentals. 
• Know the road map.
• Understand your tools.

• Look up the details.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值