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