TRACE32 除錯技巧

safrans發表於2012-08-25

1. 除錯步驟

l         連線好 TRACE32-ICD 和目標板,注意不要帶電插拔 JTAG ,容易損壞 TRACE32 或目標板,然後依次開啟 TRACE32-ICD 和目標板的電源。

l         開啟除錯軟體 TRACE32

l         設定 CPU 型別,狀態等,可以通過命令或選單,命令如下:

sys.reset

sys.CPU ARM7TDMI ; 這裡設定 CPU 型別

sys.up ; 啟動除錯,如果正常的話,狀態為 system.ready; 否則會報錯,需要檢查 CPU 設定是否正確, TRACE32 和目標板的連線和電源是否正常

 

如果除錯正常啟動後,就可以下載編譯好的檔案(可以是 .elf 、 .binary 等檔案)到 RAM 或 FLASH 中除錯了

 

l         下載編譯檔案,命令如下:

data.load.elf E:\source\test.elf /PATH E:\source

這裡的 /PATH 選項是用來指明原始碼的路徑,在除錯時 TRACE 就可以查詢到原始碼了。 這裡 TRACE 會根據 .elf 檔案裡包含的目的碼起始地址載入到 RAM 的對應地址上,也可以指定載入到 RAM 的地址,但須和編譯時的設定一致,否則程式不能正常執行。

注: TRACE 也可以把編譯目標檔案燒錄到 flash 中進行除錯,需要使用 flash 燒錄相關命令,這裡就不詳述了。

 

l         然後就可以設定斷點進行除錯了,如:

break.set 0x0c008000

TRACE32 的斷點有兩種,一種是硬體斷點(在 FLASH 中的斷點),另一種是軟斷點(在 RAM 中的斷點);硬體斷點需要 CPU 的支援,如 ARM7 最多隻支援 2 個硬體斷點,如果使用了軟斷點的話,就只能使用一個硬斷點了;而軟斷點沒有限制,可以設定很多個。

注:在 TRACE32 中,如果要使用硬體斷點,需要先設定好 FLASH 記憶體對映範圍,如下命令:

Map.bonchip 0x0000--0xfffff ; 具體範圍根據目標板 FLASH 的範圍設定

 

l         設定好斷點就可以正常除錯了。

 

2.       原始碼除錯

在編譯原始碼的時候,編譯成 ( 加 -g 選項 )debug 版本的目標檔案(可以是 axf/elf 等格式),用 TRACE32 就可以直接進行原始碼除錯了。 TRACE32 幾乎支援所有的編譯器的編譯檔案,具體格式參見 TRACE32 的幫助。 axf/elf 等編譯檔案也叫符號檔案,即在檔案中把原始碼的符號表(函式 / 變數等)儲存下來了,供除錯時使用,但裡面的符號表只是起定位作用,在除錯時還需要有目標原始碼,否則只能進行彙編級除錯, TRACE32 支援把機器碼反彙編成組合語言進行除錯,而且不需要目標檔案支援, TRACE32 可以自動從 FLASH/RAM 中讀取機器碼,然後反彙編成彙編程式碼。

通過 data.load 命令把符號表檔案 (.elf 等 ) 下載到目標機器上,指定原始碼路徑,就可以進行程式碼除錯。

data.load.elf E:\source\test.elf /PATH E:\source

 

 

3.       當機定位方法

在除錯產品時會碰到裝置當機的情況,如下在除錯過程中出現問題,可以很方便的用 TRACE 來檢視問題;但如果是裝置在正常執行時(沒有接 JTAG 除錯)出現問題或當機就比較難定位問題了;這裡可以通過 TRACE32 的 attach 功能來進行除錯,如下:

l         把出問題的機器和 TRACE32-ICD 連線好(連線 JTAG ,測試機器需先預留 JTAG 口),然後開啟 TRACE32 ,設定好 CPU 型別,使用 sys.attach 命令就可以讓 TRACE32 和問題機器連線上了,正常連線後, system 的狀態就變成了 running 或 up 。

l         接下來可以就可以直接進行彙編級除錯了。

l         但一般情況下,彙編級除錯很難定位問題,需要進行原始碼級除錯,可以按如下操作進行:先把 TRACE32-ICD 和一個同問題機器同型別的機器連線好,然後把符號表檔案( .elf 檔案等)下載(通過 data.load 命令)到好的機器上,然後再把 JTAG 線從好的機器上拔下,連線到問題機器上;然後再用 sys.attach 命令讓 TRACE32 和檔案機器連上,這樣就可以進行原始碼級除錯了。

如果不想這麼麻煩,也可以這樣操作,連線好 TRACE32-ICD 和問題機器,開啟 TRACE32 軟體,此時 system 的狀態為“ system down ” , 然後通過“ data.load ”命令下載符號表檔案 (.elf 等 ) ,由於 system 狀態為 down , TRACE32 會提示沒有符號表檔案沒有下載成功,不用管它,因為雖然沒有下載到問題機器的 RAM 上,但符號表檔案已經下載到 TRACE32 上了;然後再通過 sys.attach 命令讓 TRACE32 和問題機器關聯上,這樣就可以進行原始碼級除錯了

相關文章