軟件調(diào)試和硬件調(diào)試都是調(diào)試,思路差不多,一些具體操作方式上有所差別。這是我在工作中總結(jié)的一些認(rèn)識:
1.調(diào)試總的指導(dǎo)思想是,任何一個實驗應(yīng)該唯一說明一個問題。成功了,唯一的結(jié)論是推論是成功的;失敗了,唯一的結(jié)論是推論是失敗的。這都是帶有唯一性的。實際操作中可能并不好做到,但其中的一個唯一應(yīng)該是可以做到的。
2.由于軟件硬件的耦合,雜散參數(shù)的影響。根本問題一樣,可能現(xiàn)象每次發(fā)生都不一樣。大膽的假設(shè),仔細(xì)的求證是調(diào)試中是可以依托的一個大法寶。
3.經(jīng)驗總得來說,是一種實踐過程中的總結(jié)和記憶。一般來講,經(jīng)驗往往帶有不精確性和一些大前提。在下一個項目或調(diào)試中應(yīng)用這些經(jīng)驗,要確認(rèn)這些不精確性和前提。如同定理一樣,說三角形內(nèi)角和是180度,在歐氏幾何里是正確的,在曲面幾何里就不正確了。所以,定理公理都是有應(yīng)用前提,經(jīng)驗也逃脫不了這些問題。
一次和朋友去吃飯,他講了個生動的例子:老婆和別人打八十分。那個算得精啊,每張牌都記住了算到了,準(zhǔn)備把手里的一對AA,KK給出了。拖拉機(jī)啊。出去了就被別人給滅了,原來她還以為在打兩幅牌的,他們在打得是三幅牌的……
也是夠悲催的。
4.要對調(diào)試的系統(tǒng)的原理比較熟悉。不熟悉是不行的,考慮問題很可能就沒有邊界和方向。這也懷疑那也懷疑,變成了什么都懷疑,迷失了方向,面也太大了,不利于問題的解決。
5.現(xiàn)象的分析。解決問題都是從現(xiàn)象入手,現(xiàn)象要分清楚主次。結(jié)合設(shè)計的原理,分析出現(xiàn)象之間的關(guān)系,抓主要矛盾。次要現(xiàn)象很可能在主要現(xiàn)象解決后,伴隨著一起消失。
6.縮小包圍圈。有時候問題過于復(fù)雜,現(xiàn)象五花八門,可考慮剝洋蔥的辦法。試探性的去逼近核心問題。比如說,一個溢出錯誤,很可能產(chǎn)生一系列的連鎖反應(yīng)。也并不是一定會出現(xiàn)。可試探性的增大緩沖區(qū),調(diào)整棧,看看有沒有緩解;或者縮小緩沖區(qū)和棧,試探性看看程序的反應(yīng)。對問題的現(xiàn)象做到心中有數(shù)。
7.對比法,在遇到一些復(fù)雜的問題的時候,不能解決。若有參照物,也可以定位問題。但對比法要注意一點,只有條件相同或相近的情況下,系統(tǒng)結(jié)構(gòu)相同或相近下才有意義。否則比較會大大的降低可比性以及結(jié)果的意義。比如說一個軟件模塊或硬件模塊,在其他系統(tǒng)上正常,在本系統(tǒng)上不正常。可推測為使用的問題。輸入?yún)?shù)、輸出參數(shù),動態(tài)運(yùn)行的條件不滿足。
9.置換法,這個比較簡單,一個一個換,換到有問題的那個,問題解決了,自然也就定位問題的所在點了。也可以把目標(biāo)系統(tǒng)的模塊置換到正確的系統(tǒng)上,看看能不能正常工作。
10.分治法,分治法是分而治之,各個擊破的方法。現(xiàn)象很多,按照原理將現(xiàn)象分類。相關(guān)聯(lián)的現(xiàn)象可作為一組,綜合考慮。
11.調(diào)試分層次,經(jīng)常使用的功能,重要的核心功能應(yīng)該先調(diào)試,而次要的,不常用的功能最后調(diào)試。
12.最后,細(xì)致的觀察。觀察可以區(qū)別兩種差別不大的現(xiàn)象;可以明確經(jīng)驗的應(yīng)用范圍;可以解決一些非常棘手的問題。Jtag不是萬能的,會影響程序的速度和執(zhí)行的頻度;printf影響 棧的深淺以及運(yùn)行時序;示波器探頭是個負(fù)載,信號可能驅(qū)動不起來……這些問題一般都是細(xì)微的現(xiàn)象,非常容易被忽視,唯有細(xì)致的觀察仔細(xì)的思考才可以捕捉。
審核編輯:劉清
-
軟件調(diào)試
+關(guān)注
關(guān)注
0文章
4瀏覽量
6189 -
硬件調(diào)試
+關(guān)注
關(guān)注
1文章
9瀏覽量
10691
原文標(biāo)題:如何找到解決問題的思路和方法——關(guān)于軟硬件調(diào)試
文章出處:【微信號:射頻美學(xué),微信公眾號:射頻美學(xué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論