标题:
工程师故事:一段真实的程式除错经历
[打印本页]
作者:
m1_ljp
时间:
2012-8-21 14:31
标题:
工程师故事:一段真实的程式除错经历
1980年代初期,我在PABX系统公司担任硬件
工程师
,当时,软件在PABX
系统设计
中已经占据主导地位了,因此,来自浮动闸输入的程式码漂移线(errant line)也可能轻易地导致错误。在不断听到硬件和软件设计师激烈的交相指责后,我发誓,在我的
除错
过程中绝不要再重蹈这些覆辙。正是抱持着这种想法,才有了以下这段真实故事。 故事开始于一通来自我们公司英国办事处的电话,主要内容是抱怨一些最新发布的硬件,或是由PABX的产品所引发,在随机通话中出现的单向通话(one-way audio)情况。此外,尽管并非经常出现,但在分机之间的通话可能会在PABX系统运作中接收到来自其他通话的音讯,这个问题很令人担心,因为它可能潜藏着法律责任。
一通来自伦敦的电话
CEO很关注这个问题,而我们则拼命地试图在总部实验室复制问题,但并没有成功。很快,最后的决定是我和软件设计师必须立即飞到英国以设法解决问题。CEO随后设法让我的护照在仅仅几天内更新,因此,软件设计师和我在那个周末都准备好飞到英国了。 在前一个周五下午,我们的CEO把我们叫到他的办公室,我们发现,我们位在美国东南部的技术支援专家已经成功地复制了同样的问题。我们的总裁当晚因为这个问题赶回公司,CEO也安排在当晚将我们送到美国技术支持办公室。我急忙打包行李,踏上了我首次的里尔喷射机(Lear jet)飞行之旅。 我的软件同事和我还携带了
示波器
和逻辑分析仪。但我们要降落的小镇机场却遇上了浓雾,阻碍了行程。我们后来才知道,最初的能见度几乎是零,在飞行员不得不中止降落,并经历一次陡峭的爬升之后,跑道的浓雾状况才有明显好转。 飞机上的迷你酒吧有助平息紧张的神经。几小时后,我们终于坐上计程车前往办公室,当时我们已经足够清醒,能与司机就美国政 治到参战等极端观点任意辩论。过了午夜后,我们终于扺达,并短暂的睡眠后直奔办公室而去。
立即检查程式码
这个办公室拥有的PABX设备具备能够产生流量的特殊软件,可驱动第二部测试中的PABX设备。尽管我们已经在我们的实验室中使用相同的测试软件进行相同的设置,但这套系统不知为何,每隔几小时便会产生一次故障。我们花了24小时仔细研究这套系统,一次次地检查讯号,撷取执行中的CPU程式码并重新读取组合语言程式码。 一切似乎没有什么不妥,但错误仍然接连发生。幸运的是,我们发现一个罕见但不断重复的特定音讯故障,这将我们的关注范围缩小到了系统中的特定音讯交叉点。这种特殊的音讯故障是指引我们的最佳明灯,我立即设置了分析仪的CPU追踪器以撷取这个可疑音讯交叉点设备的暂存器写入周期。到当天深夜,疲劳和烦躁一度让我过早做出结论:我们在追逐的是一个软件故障。不过我并未说出口,而是重新考虑这个导致错误状态的交叉点是否是由硬件故障所导致。
冗长的除错过程
到将近清晨时,目标故障终于浮出水面。我立即停止了CPU追踪器,我们回头看着写入周期记录档。我的软件同事用他睡眼惺忪的眼睛来回检查原始码列,以及所撷取到的写入到交叉点设备的资料,而后惊呼“这个值到底是哪来的?这不是子程序应该写入的!” 我们小心地检视常式的原始码列表,并同意常式是不可能建构出这种位元模式的。“太好了,现在是RAM或CPU汇流排问题了…,”我喃喃地说。 该软件保存了交叉点暂存器的影子RAM缓冲区;现在我们将注意力转到这个缓冲区,针对与漂移交叉点对应的特定RAM位置设置了记录写入周期。经过一个半小时的追踪撷取后,没有发现任何故障的踪影,我的软件同事迅速审查愈积愈多的追踪列表,并发现了一些东西。“你看!所有的写入看来都很正常,除了这个;CPU应该没有写入资料模式。子程序遮罩了这些位元,所以他们不应该是1s。但这是谁写的呢?”
找到了!Bug就在这里
我立即设定了CPU追踪器在非法位元模式的写入上触发该缓冲区,而一个良好的预触发撷取区块让我们看到了非法写入的起源。 很快地,罪魁祸首便显露出来了,是一个最近编写的,用来支援长数字串的数字集合缓冲区常式。其缓冲区经过重新定位,但在采集更长字串时,它便会超出到交叉点影子缓冲区。 由于交叉点设备仅触及了总可用内部系统音讯通道的一部份,因此一个坏的位元模式在大部份时间都是无害的,只有在特定的埠连接处于活动状态时它才会出现。这轻易地解释了极低的故障率,以及为何我们无法在一开始就重现它。 在丰盛的早餐后,我们打电话回总部转达我们的调查结果;英国团队确认会在数小时内修补程式。我们在短暂的补眠后就立即飞回家。 从接到英国团队第一通电话开始,我们都避免了传统软硬件人员互相责怪的情况。这是纯粹的团队精神,让我们以在最短的时间内解决问题,同时也避免了一次昂贵的海外之旅。
本文作者Rick Hille在科技产业拥有超过30年的经验,负责多种领域的设计和生产线管理,包括电信设备、视讯桌上型会议系统、视讯保全系统和网路家电等。他毕业于Ryerson Polytechnical Institute,目前仍是硬件设计师,任职于高科技产业。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0