**:
1. 除錯步驟
l 連線好 trace32-icd 和目標板,注意不要帶電插拔 jtag ,容易損壞 trace32 或目標板,然後依次開啟 trace32-icd 和目標板的電源。
l 開啟除錯軟體 trace32
l 設定 cpu 型別,狀態等,可以通過命令或選單,命令如下:
sys.reset
sys.cpu arm7tdmi ; 這裡設定 cpu 型別
sys.up ; 啟動除錯,如果正常的話,狀態為 system.ready; 否則會報錯,需要檢查 cpu 設定是否正確,trace32 和目標板的連線和電源是否正常
data.load.elf e:/source/test.elf /path e:/source
這裡的/path
選項是用來指明源**的路徑,在除錯時
trace
就可以查詢到源**了。 這裡 trace會根據 .elf 檔案裡包含的目標**起始位址載入到 ram 的對應位址上,也可以指定載入到 ram 的位址,但須和編譯時的設定一致,否則程式不能正常執行。
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 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 接下來可以就可以直接進行彙編級除錯了。
MTK除錯入門之一 TRACE使用的技巧
zzjltx 發表於 2009 12 23 11 49 00mtk除錯入門之一 trace使用的技巧 懶書生 發表於 2009 10 29 20 13 00 52rd上曾有朋友讓我寫一些除錯技巧方面的文章.除錯對於軟體是十分重要的,但卻不是一篇二篇文章能講清楚的.有很多除錯技巧都是零零碎碎的東西,用...
MTK除錯入門之一 TRACE使用的技巧
52rd上曾有朋友讓我寫一些除錯技巧方面的文章.除錯對於軟體是十分重要的,但卻不是一篇二篇文章能講清楚的.有很多除錯技巧都是零零碎碎的東西,用的時候能很容易使用,但要寫出來時,卻還是比較麻煩的.mtk的除錯一般來說可以分為 除錯與手機除錯.這兩種除錯對於研發新功能,修改bug,研究演算法都是十分重要...
MTK除錯入門之一 TRACE使用的技巧
mtk的除錯一般來說可以分為 除錯與手機除錯.這兩種除錯對於研發新功能,修改bug,研究演算法都是十分重要的.當然,這兩種除錯也有差異,有時會出現在模擬器執行正常,在手機卻執行失敗,或者相反,這就突出了軟體模擬環境與硬體手機環境的差別.原因可能是各種各樣的,比如可能是有些硬體軟體沒有辦法模擬,有些新...