首頁>>>技術(shù)>>>交換機  交換/排隊機產(chǎn)品

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

2011/03/18

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

  故事開始于一通來自我們公司英國辦事處的電話,主要內(nèi)容是抱怨一些最新發(fā)布的硬件,或是由PABX的產(chǎn)品所引發(fā),在隨機通話中出現(xiàn)的單向通話(one-way audio)情況。此外,盡管并非經(jīng)常出現(xiàn),但在分機之間的通話可能會在PABX系統(tǒng)運作中接收到來自其他通話的音訊,這個問題很令人擔心,因為它可能潛藏著法律責任。

  一通來自倫敦的電話

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

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

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

  立即檢查程式碼

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

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

  冗長的除錯過程

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

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

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

  找到了!Bug就在這里

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

  很快地,罪魁禍首便顯露出來了,是一個最近編寫的,用來支援長數(shù)字串的數(shù)字集合緩沖區(qū)常式。其緩沖區(qū)經(jīng)過重新定位,但在采集更長字串時,它便會超出到交叉點影子緩沖區(qū)。

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

  在豐盛的早餐后,我們打電話回總部轉(zhuǎn)達我們的調(diào)查結(jié)果;英國團隊確認會在數(shù)小時內(nèi)修補程式。我們在短暫的補眠后就立即飛回家。

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

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

電子工程專輯



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