ARM ADS中的AXD 調試經驗集錦

ARM ADS中的AXD 調試經驗集錦
2009-08-22 15:05

ARM ADS中的AXD 調試經驗集錦
本文來自:http://blog.ednchina.com/arm/35008/message.aspx

1、如何設置AXD連接的Target。
在菜單的Configure Target…選項中可以設置。一般選擇MutiIce或者ARMUL兩種。

ARMUL是一種ARM的模擬器。一般的算法或者一些無需和硬件中斷等設備打交道的程序都可以通過這個進行調試。使用上非常簡單。

我們一般上板子進行調試都是通過MutiICE來進行。在剛剛安裝了系統的時候,菜單中沒有MutiICE,需要我們手動添加:

點擊ADD按鈕,然後在彈出的文件瀏覽中,選擇“C:/Program Files/ARM/Multi-ICE/Muti-ICE.dll”(默認安裝的話)。然後點擊“確定”。這樣就把MutiICE的調試接口安裝上了。

2、如何保存當前的調試現場。
我們在調試過程中,經常需要在不同的地方設置斷點、設置Watchpoint或者打開很多source文件。但是,一旦我們關閉了AXD,所有的工作都白費了。當我們再次打開AXD後,我們得到的仍然是沒有任何斷點、只打開一個entry文件的調試環境。這裏介紹一種方法可以自動保存上一次的調試現場(寄存器的數據都是保存的)。

        Options->General tab. 這裏確認Save and load default sessions 選項 是選中的。然後打開Session File,確保Rselect Target和Reload images 選項是選中的。

        在設置保存後,我們在關閉AXD後,再次啓動,就會自動加載上次的image,恢復寄存器了。

        如果需要保存多個現場,那麼就在設置保存後,在File菜單中選擇Save Session來進行保存。不過注意,保存的路徑中不能 有空格和特殊字符。最好保存在ClearCase上。在需要恢復現場的時候,只需要Load Session就一切OK。你以前辛辛苦苦設置的斷點、 Watchpoint全都回來了。

3、不能設置斷點,怎麼辦?
不能設置斷點時,我僅知有幾種解決方案,這裏列舉一下:

A:清空CPU的Vector Catch 。

        在Options->Configure Process..中清除。

B:Run一下,馬上暫停。

        這種方式對要求不高的斷點(諸如設置在APP層中的斷點)比較合適。方便。

C:清除以前的斷點。

        一般發生在Flash調試的情況。首先清除以前的斷點,然後才能設置新的斷點。

D:命令行 spp vector_catch 0

     其實和A相同。如果寫在開機script中,那麼就可以自動排除開機無法設置斷點問題。

E:啓動AXD的時候使用—debug這個參數,這樣就可以添加一個自動斷點在Main()上。

4、         如何不reload image就可以重新從頭開始調試。
很多時候我們需要讓代碼重頭跑起來複現一個bug。但是,一般來說,都是reload一下。如果image比較小還可以忍受,但是想660那種16M左右的巨型image,這種代價就未免太大。這裏介紹幾種我所知道的方法,可以從頭開始調試:

A:設置Current寄存器。

        點擊 打開process register->current 組。設置pc爲0 , cpsr爲 svc模式下。關閉Thumb模式。這時F5即可運行下去。

B:運行腳本

        這種方式速度更快,也方便。上上之選。

setpc 0

sreg cpsr 0xd3

5、         如何無條件跳轉?
一般這種事情最好是在同一個函數中,某條語句無條件跳到另一條語句上時使用。最好不要跨函數使用(否則有堆棧錯誤,很難查的)

把光標定在需要跳轉到的代碼上,右鍵菜單execute->Set Next Statement .


6、         AXD有沒有什麼輔助工具?
有的。

IDA pro ,非常好的axf解析工具。可以統計axf文件中的函數、全局變量、調用關係等。界面非常友好,代碼界面可以清楚看出函數引用關係、變量初始話、變量引用、修改的統計。

可以說,IDA Pro是彙編級的Source insight 。大家可以在網絡上下載它的最新版安裝使用。


7、 如何調試需要加載到Flash上的代碼
以下是我的經驗:

1、   在有jTag調試口的板子上Download一個版本。

2、   選擇 File->load debug symbols 。然後選擇CodeWarrior上Release版生成的那個AXF。

3、 現在就可以調試Flash上的程序了。和Debug完全一樣。不過注意,在這種情況下,一般只能設置2個斷點。


8、 使用fromelf命令
fromelf命令可以對我們生成的axf文件進行進一步操作的命令。

諸如:

從axf文件中抽出二進制代碼:fromelf –bin –output a.bin a.axf

從axf文件中抽出二進制代碼:fromelf –m32 –output a.s32 a.axf

9、 FAQ

Q:   生成的ram方式的redboot映像文件,應該使用什麼工具調試編譯的ram方式的redboot。

用ADS調試工具只能加載.axf格式的文件

A:   用ADS還可以加載bin文件(File->Load Memory From Memory...),可以使用ADS命令行或腳本初始化SDRAM

load bin文件時需要指定載入地址,對於s3c44b0x通常爲0x0c040000,即在相應的ldi文件中指定的
SECTION_rom_vectors (ram, 0x0c040000 , LMA_EQ_VMA)

將BIN程序Load後,將PC指針修改爲0X0C040000即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章