搞軟件開發(fā),如果誰能拍胸脯說自己開發(fā)的代碼不存在bug,一定會(huì)被現(xiàn)實(shí)打臉的。系統(tǒng)復(fù)雜了,代碼多了,一定會(huì)出問題。就算代碼架構(gòu)設(shè)計(jì)得多么先進(jìn),程序員編程水平多么高,團(tuán)隊(duì)協(xié)作多么緊密,代碼審核多么嚴(yán)謹(jǐn),運(yùn)行出問題的幾率一定存在,是不過是概率大小,出問題早晚,問題的嚴(yán)重與否而已。
既然代碼會(huì)出問題,那肯定要解決,最有效的辦法就是調(diào)試(Debug)了。不管是嵌入式開發(fā),還是應(yīng)用開發(fā),調(diào)試都是程序員必備技能,只不過嵌入式開發(fā)的調(diào)試又有所不同,除了需要OCD、GDB之類的調(diào)試軟件之外,還需要J-Link、ST-Link等調(diào)試器,以及片上JTAG模塊的支持。
我在讀大學(xué)的時(shí)候?qū)W的是51單片機(jī),當(dāng)時(shí)也只有實(shí)驗(yàn)室有實(shí)驗(yàn)箱。所謂的調(diào)試基本就是根據(jù)運(yùn)行現(xiàn)象去分析,比如某種亮燈狀態(tài)表示某種情況,或者是串口打印信息,屏幕顯示信息等,以此來Debug。
后來跟課題組做項(xiàng)目,陸續(xù)用到AVR、PIC單片機(jī),當(dāng)時(shí)基本沒有第三方的開發(fā)板,只能找官方資源,官方的下載器。官方的調(diào)試器極其昂貴,想調(diào)試的話也只能跟調(diào)試51一樣,基本都能解決問題,就是要麻煩一點(diǎn)。
現(xiàn)在的ARM調(diào)試器都是白菜價(jià),各個(gè)IDE也都具備基本的調(diào)試功能,Debug更方便了。Keil下的調(diào)試比較直觀,在工程選項(xiàng)里配置好調(diào)試參數(shù)后,點(diǎn)個(gè)按鈕就進(jìn)入調(diào)試模式,這里就不多介紹。今天來講一下CubeIDE下怎么去調(diào)試代碼。
1. CubeIDE的編譯選項(xiàng)
跟Keil不同,基于Eclipse的CubeIDE下的工程默認(rèn)有Debug和Release兩個(gè)編譯配置,如下圖所示??梢栽诠こ虒傩韵略O(shè)置不同的編譯參數(shù),分別作為調(diào)試和發(fā)行時(shí)使用,當(dāng)然也可以根據(jù)需要增加新的編譯配置。Keil下也可以實(shí)現(xiàn)類似的功能,不過需要我們自己去配置,這個(gè)有很多文檔可以參考。

保留不同編譯配置的功能在寫代碼時(shí)非常有用,結(jié)合條件編譯,可以提高調(diào)試效率,或者是適應(yīng)不同的硬件平臺(tái),不需要再搞一個(gè)新的工程。例如在Debug編譯配置下,默認(rèn)會(huì)定義一個(gè)DEBUG的符號(hào),在Release編譯配置下,則沒有定義這個(gè)符號(hào)。見下圖。

我們?cè)诰帉懘a的時(shí)候,就可以根據(jù)編譯配置的不同,結(jié)合條件編譯,選擇編譯不同的代碼。例如,在正常工作的時(shí)候,某個(gè)傳感器上電后需要經(jīng)過10分鐘才能正常工作,而在調(diào)試的時(shí)候,完全沒必要去等這10分鐘。我們可以用下面的偽代碼實(shí)現(xiàn)這個(gè)功能。
#ifndef DEBUG
delay_second(10*60); //延時(shí)10分鐘
#endif
- 調(diào)試配置
使用Debug編譯選項(xiàng)編譯完成后,會(huì)在工程目錄->Debug下生成elf可執(zhí)行文件,elf文件包含調(diào)試信息,這是我們調(diào)試的必要文件。Eclipse調(diào)試前需要配置調(diào)試參數(shù),配置方式見下圖。

需要進(jìn)行調(diào)試的話,點(diǎn)擊工具欄小蟲子圖標(biāo)就進(jìn)入調(diào)試模式。
在調(diào)試模式下可以設(shè)置斷點(diǎn),或單步運(yùn)行,也可以查看寄存器的值,變量值等。另外CubeIDE還提供了很多有用的功能,比如說可以調(diào)出“故障分析器”,代碼出現(xiàn)異常時(shí)可以自動(dòng)分析錯(cuò)誤類型,不需要我們費(fèi)力的去查看相關(guān)寄存器的值來確定錯(cuò)誤類型;還可以顯示反匯編后的匯編代碼,與C代碼同步顯示。需要注意的是,調(diào)試模式下,編譯代碼應(yīng)選擇不優(yōu)化,這樣設(shè)置的斷點(diǎn)才都會(huì)有效。
調(diào)試時(shí)所需要查看的信息都可以在下圖的菜單里調(diào)出來。

3. 小結(jié)
進(jìn)入調(diào)試模式后,就可以根據(jù)實(shí)際情況設(shè)置斷點(diǎn),查看寄存器或變量值,也可以根據(jù)需要單步運(yùn)行。大家可以在實(shí)踐中熟悉調(diào)試方法與技巧。
另外,在調(diào)試模式下,無論是打斷點(diǎn)還是單步運(yùn)行,都沒有辦法實(shí)時(shí)跟蹤寄存器或變量值,看到的只是斷點(diǎn)處的值,如果想看到實(shí)時(shí)變化的寄存器或變量值,甚至是某個(gè)函數(shù)被調(diào)用的次數(shù),或者運(yùn)行占用的CPU時(shí)間等,可以通過ARM提供的SWV(Serial Wire Viewer)實(shí)時(shí)跟蹤技術(shù)來實(shí)現(xiàn),下次我們?cè)賮碇v講這個(gè)SWV。
-
傳感器
+關(guān)注
關(guān)注
2576文章
55110瀏覽量
791845 -
寄存器
+關(guān)注
關(guān)注
31文章
5611瀏覽量
130088 -
STM32
+關(guān)注
關(guān)注
2310文章
11167瀏覽量
373686 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
329瀏覽量
25109 -
ARM單片機(jī)
+關(guān)注
關(guān)注
0文章
53瀏覽量
10464
發(fā)布評(píng)論請(qǐng)先 登錄
在CubeIDE環(huán)境下怎么去調(diào)試代碼呢?
評(píng)論