TRACE32 除錯技巧
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 和問題機器關聯上,這樣就可以進行原始碼級除錯了
相關文章
- 虛擬ECU:基於SkyEye的TRACE32嵌入式除錯除錯
- Chrome 除錯技巧Chrome除錯
- css除錯技巧CSS除錯
- VC++除錯技巧C++除錯
- chrome的除錯技巧Chrome除錯
- Xcode 除錯技巧XCode除錯
- JavaScript 反除錯技巧JavaScript除錯
- 前端js除錯技巧前端JS除錯
- docker 容器除錯技巧Docker除錯
- 5 個 JavaScript 除錯技巧JavaScript除錯
- wkwebview和UIWebView除錯技巧WebViewUI除錯
- Flash builder 除錯技巧 (分享)UI除錯
- 5 個JavaScript除錯技巧JavaScript除錯
- 很好用的 UI 除錯技巧UI除錯
- React Native / React除錯技巧React Native除錯
- console 除錯技巧除錯
- Xcode除錯技巧之:LLDBXCode除錯LLDB
- 谷歌瀏覽器除錯技巧谷歌瀏覽器除錯
- VS除錯技巧之附加程式除錯
- Python 程式碼除錯技巧Python除錯
- 小技巧 - CSS中:hover除錯CSS除錯
- JavaScript 除錯建議和技巧JavaScript除錯
- debug技巧之本地除錯除錯
- iOS比優雞除錯技巧篇(一):reveal檢視除錯iOS除錯
- 筆記|軟體除錯的技巧筆記除錯
- Java安全之jar包除錯技巧JavaJAR除錯
- 【除錯技巧】Dialog dismiss 崩潰除錯
- 動態除錯及LLDB技巧集合除錯LLDB
- Postman除錯技巧之介面簽名Postman除錯
- javascript除錯的幾個常用技巧JavaScript除錯
- [譯] 前端除錯技巧與訣竅前端除錯
- eclipse除錯的方法和技巧Eclipse除錯
- debug技巧之遠端除錯除錯
- debug技巧之使用Arthes除錯除錯
- 前端Chrome除錯技巧最全彙總前端Chrome除錯
- CSS除錯小技巧 —— 除錯DOM元素hover,focus,actived的樣式CSS除錯
- 還在斷點除錯?教你四種除錯技巧讓你快速定位錯誤!斷點除錯
- 【Java】Debug斷點除錯常用技巧Java斷點除錯