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