首頁(yè)>>>技術(shù)>>>交換機(jī)  交換/排隊(duì)機(jī)產(chǎn)品

工程師故事:一段真實(shí)的程式碼除錯(cuò)經(jīng)歷

2011/03/18

  1980年代初期,我在PABX系統(tǒng)公司擔(dān)任硬件工程師,當(dāng)時(shí),軟件在PABX系統(tǒng)設(shè)計(jì)中已經(jīng)占據(jù)主導(dǎo)地位了,因此,來(lái)自浮動(dòng)閘輸入的程式碼漂移線(errant line)也可能輕易地導(dǎo)致錯(cuò)誤。在不斷聽到硬件和軟件設(shè)計(jì)師激烈的交相指責(zé)后,我發(fā)誓,在我的除錯(cuò)過(guò)程中絕不要再重蹈這些覆轍。正是抱持著這種想法,才有了以下這段真實(shí)故事。

  故事開始于一通來(lái)自我們公司英國(guó)辦事處的電話,主要內(nèi)容是抱怨一些最新發(fā)布的硬件,或是由PABX的產(chǎn)品所引發(fā),在隨機(jī)通話中出現(xiàn)的單向通話(one-way audio)情況。此外,盡管并非經(jīng)常出現(xiàn),但在分機(jī)之間的通話可能會(huì)在PABX系統(tǒng)運(yùn)作中接收到來(lái)自其他通話的音訊,這個(gè)問(wèn)題很令人擔(dān)心,因?yàn)樗赡軡摬刂韶?zé)任。

  一通來(lái)自倫敦的電話

  CEO很關(guān)注這個(gè)問(wèn)題,而我們則拼命地試圖在總部實(shí)驗(yàn)室復(fù)制問(wèn)題,但并沒有成功。很快,最后的決定是我和軟件設(shè)計(jì)師必須立即飛到英國(guó)以設(shè)法解決問(wèn)題。CEO隨后設(shè)法讓我的護(hù)照在僅僅幾天內(nèi)更新,因此,軟件設(shè)計(jì)師和我在那個(gè)周末都準(zhǔn)備好飛到英國(guó)了。

  在前一個(gè)周五下午,我們的CEO把我們叫到他的辦公室,我們發(fā)現(xiàn),我們位在美國(guó)東南部的技術(shù)支援專家已經(jīng)成功地復(fù)制了同樣的問(wèn)題。我們的總裁當(dāng)晚因?yàn)檫@個(gè)問(wèn)題趕回公司,CEO也安排在當(dāng)晚將我們送到美國(guó)技術(shù)支持辦公室。我急忙打包行李,踏上了我首次的里爾噴射機(jī)(Lear jet)飛行之旅。
  
  我的軟件同事和我還攜帶了示波器和邏輯分析儀。但我們要降落的小鎮(zhèn)機(jī)場(chǎng)卻遇上了濃霧,阻礙了行程。我們后來(lái)才知道,最初的能見度幾乎是零,在飛行員不得不中止降落,并經(jīng)歷一次陡峭的爬升之后,跑道的濃霧狀況才有明顯好轉(zhuǎn)。

  飛機(jī)上的迷你酒吧有助平息緊張的神經(jīng)。幾小時(shí)后,我們終于坐上計(jì)程車前往辦公室,當(dāng)時(shí)我們已經(jīng)足夠清醒,能與司機(jī)就美國(guó)政 治到參戰(zhàn)等極端觀點(diǎn)任意辯論。過(guò)了午夜后,我們終于扺達(dá),并短暫的睡眠后直奔辦公室而去。

  立即檢查程式碼

  這個(gè)辦公室擁有的PABX設(shè)備具備能夠產(chǎn)生流量的特殊軟件,可驅(qū)動(dòng)第二部測(cè)試中的PABX設(shè)備。盡管我們已經(jīng)在我們的實(shí)驗(yàn)室中使用相同的測(cè)試軟件進(jìn)行相同的設(shè)置,但這套系統(tǒng)不知為何,每隔幾小時(shí)便會(huì)產(chǎn)生一次故障。我們花了24小時(shí)仔細(xì)研究這套系統(tǒng),一次次地檢查訊號(hào),擷取執(zhí)行中的CPU程式碼并重新讀取組合語(yǔ)言程式碼。

  一切似乎沒有什么不妥,但錯(cuò)誤仍然接連發(fā)生。幸運(yùn)的是,我們發(fā)現(xiàn)一個(gè)罕見但不斷重復(fù)的特定音訊故障,這將我們的關(guān)注范圍縮小到了系統(tǒng)中的特定音訊交叉點(diǎn)。這種特殊的音訊故障是指引我們的最佳明燈,我立即設(shè)置了分析儀的CPU追蹤器以擷取這個(gè)可疑音訊交叉點(diǎn)設(shè)備的暫存器寫入周期。到當(dāng)天深夜,疲勞和煩躁一度讓我過(guò)早做出結(jié)論:我們?cè)谧分鸬氖且粋(gè)軟件故障。不過(guò)我并未說(shuō)出口,而是重新考慮這個(gè)導(dǎo)致錯(cuò)誤狀態(tài)的交叉點(diǎn)是否是由硬件故障所導(dǎo)致。

  冗長(zhǎng)的除錯(cuò)過(guò)程

  到將近清晨時(shí),目標(biāo)故障終于浮出水面。我立即停止了CPU追蹤器,我們回頭看著寫入周期記錄檔。我的軟件同事用他睡眼惺忪的眼睛來(lái)回檢查原始碼列,以及所擷取到的寫入到交叉點(diǎn)設(shè)備的資料,而后驚呼“這個(gè)值到底是哪來(lái)的?這不是子程序應(yīng)該寫入的!”

  我們小心地檢視常式的原始碼列表,并同意常式是不可能建構(gòu)出這種位元模式的!疤昧,現(xiàn)在是RAM或CPU匯流排問(wèn)題了…,”我喃喃地說(shuō)。

  該軟件保存了交叉點(diǎn)暫存器的影子RAM緩沖區(qū);現(xiàn)在我們將注意力轉(zhuǎn)到這個(gè)緩沖區(qū),針對(duì)與漂移交叉點(diǎn)對(duì)應(yīng)的特定RAM位置設(shè)置了記錄寫入周期。經(jīng)過(guò)一個(gè)半小時(shí)的追蹤擷取后,沒有發(fā)現(xiàn)任何故障的蹤影,我的軟件同事迅速審查愈積愈多的追蹤列表,并發(fā)現(xiàn)了一些東西!澳憧!所有的寫入看來(lái)都很正常,除了這個(gè);CPU應(yīng)該沒有寫入資料模式。子程序遮罩了這些位元,所以他們不應(yīng)該是1s。但這是誰(shuí)寫的呢?”

  找到了!Bug就在這里

  我立即設(shè)定了CPU追蹤器在非法位元模式的寫入上觸發(fā)該緩沖區(qū),而一個(gè)良好的預(yù)觸發(fā)擷取區(qū)塊讓我們看到了非法寫入的起源。

  很快地,罪魁禍?zhǔn)妆泔@露出來(lái)了,是一個(gè)最近編寫的,用來(lái)支援長(zhǎng)數(shù)字串的數(shù)字集合緩沖區(qū)常式。其緩沖區(qū)經(jīng)過(guò)重新定位,但在采集更長(zhǎng)字串時(shí),它便會(huì)超出到交叉點(diǎn)影子緩沖區(qū)。

  由于交叉點(diǎn)設(shè)備僅觸及了總可用內(nèi)部系統(tǒng)音訊通道的一部份,因此一個(gè)壞的位元模式在大部份時(shí)間都是無(wú)害的,只有在特定的埠連接處于活動(dòng)狀態(tài)時(shí)它才會(huì)出現(xiàn)。這輕易地解釋了極低的故障率,以及為何我們無(wú)法在一開始就重現(xiàn)它。

  在豐盛的早餐后,我們打電話回總部轉(zhuǎn)達(dá)我們的調(diào)查結(jié)果;英國(guó)團(tuán)隊(duì)確認(rèn)會(huì)在數(shù)小時(shí)內(nèi)修補(bǔ)程式。我們?cè)诙虝旱难a(bǔ)眠后就立即飛回家。

  從接到英國(guó)團(tuán)隊(duì)第一通電話開始,我們都避免了傳統(tǒng)軟硬件人員互相責(zé)怪的情況。這是純粹的團(tuán)隊(duì)精神,讓我們以在最短的時(shí)間內(nèi)解決問(wèn)題,同時(shí)也避免了一次昂貴的海外之旅。

  本文作者Rick Hille在科技產(chǎn)業(yè)擁有超過(guò)30年的經(jīng)驗(yàn),負(fù)責(zé)多種領(lǐng)域的設(shè)計(jì)和生產(chǎn)線管理,包括電信設(shè)備、視訊桌上型會(huì)議系統(tǒng)、視訊保全系統(tǒng)和網(wǎng)路家電等。他畢業(yè)于Ryerson Polytechnical Institute,目前仍是硬件設(shè)計(jì)師,任職于高科技產(chǎn)業(yè)。
共 2 頁(yè):1 2 

電子工程專輯



相關(guān)閱讀:
未來(lái)融合通信新載體:iPad與ZPCX 1000U 2011-03-08
程控交換機(jī)“上網(wǎng)” 企業(yè)通信可享“零話費(fèi)” 2011-01-18
航空代理人呼叫中心,如何隨需而變? 2010-10-18
下一代融合型交換機(jī)將呼叫中心引入平臺(tái)化時(shí)代(五) 2010-10-15
3G視頻技術(shù)在應(yīng)急通信中的應(yīng)用 2010-09-06