軟硬件調(diào)試九法:分而治之
通過二分法,逐次縮小問題范圍,在查找問題時,這個方法是唯一需要應用的規(guī)則,所有其它規(guī)則都是幫助你遵循這條規(guī)則。
本文引用地址:http://cafeforensic.com/article/201605/291401.htm1、通過逐次逼近縮小搜索范圍
通過二分法,逐次縮小問題范圍,在查找問題時,這個方法是唯一需要應用的規(guī)則,所有其它規(guī)則都是幫助你遵循這條規(guī)則。首先搜索前面1/2,如果有錯,則再搜索前1/4,如果沒錯,則搜索范圍就定在1/4-1/2之間,然后再次細分,幾次之后就會找到問題。
實際案例:有次程序運行反應很慢,特別是蜂鳴器響一次后,要幾秒鐘的時間,才能相應按鍵。因此就采用這個方法,很快確定慢是由等待蜂鳴器時間過長導致,從程序邏輯看,等待蜂鳴器結(jié)束函數(shù)并沒有錯誤,但是其中while循環(huán)等待的蜂鳴器結(jié)束標志的變量,是在中斷中處理的,該標志由于未定義為volatile類型,因此被編譯器優(yōu)化后,循環(huán)判斷時只獲取一次,所以只有循環(huán)延時超時退出時才結(jié)束。改為volatile類型后,問題解決。
2、使用易于查看的測試模式
在存儲器讀寫測試、通訊數(shù)據(jù)偶爾失敗測試時,發(fā)送00 55 AA FF或者1到100連續(xù)數(shù)據(jù)比使用隨機數(shù)據(jù)更容易發(fā)現(xiàn)錯誤。在測試彩色顯示屏顏色失真時,采用紅綠藍黃等色條比圖片要容易發(fā)現(xiàn)問題。
實際案例:有次使用TFT顯示圖片,黑白的顯示正常,彩色的顏色失真,并且毛刺嚴重,以為顯示屏有質(zhì)量問題,使用彩色條后,發(fā)現(xiàn)顯示和顏色和設定的不一致,仔細對比才發(fā)現(xiàn)驅(qū)動程序發(fā)出的16位數(shù)據(jù),按照字節(jié)發(fā)送時,數(shù)據(jù)顛倒,所以調(diào)整后顯示正常。
3、從有問題的一端開始搜索
不要從正確的一端開始確認,正確的太多了,因此需要從錯誤的一端開始,然后向上游查找。
4、修復已知的bug
有時我們很難相信一個系統(tǒng)有很多bug,這使得分而治之的隔離原則變得困難,因此如果確實查明了其中一個問題時,應該立即修復它,然后再查找其它問題。只有修復了已知的錯誤,才能集中精力查找其它問題,有時修復一個問題,另一問題也消失了,也就是兩個問題時是一個bug。
5、首先消除噪聲干擾
在硬件中,噪音也可能因此各種難以查找的間歇性問題,因此查找問題前,應該首先注意短時脈沖干擾、時鐘回波、模擬信號噪聲、時序波動等不穩(wěn)定因素;
在軟件中,不合理的多線程、意外的沖入例程、未初始化的局部變量都會導致系統(tǒng)產(chǎn)生很多隨機行為,為工作帶來很多麻煩。
另外,技術(shù)人員很容易成為完美主義者,為了達到高質(zhì)量,把所有不好的設計都修復一遍,可能會因為前面一個程序編寫的看起來不好的程序代碼就刪掉重寫,但是如果沒有引起實際問題,最好還是保留他們吧,不要太過極端,你的精力在于找到bug并消除他們,這種修復耽誤了真正的研究時間。
評論