ARM ADS中的AXD 調(diào)試經(jīng)驗(yàn)集錦
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1,怎么設(shè)置AXD連接的Target。
在菜單的Configure Target…選項(xiàng)中能設(shè)置。一般選擇MutiIce或ARMUL兩種。
ARMUL是一種ARM的模擬器。一般的算法或一些無需和硬件中斷等設(shè)備打交道的程式都能通過這個(gè)進(jìn)行調(diào)試。使用上非常簡(jiǎn)單。
我們一般上板子進(jìn)行調(diào)試都是通過MutiICE來進(jìn)行。在剛剛安裝了系統(tǒng)的時(shí)候,菜單中沒有MutiICE,需要我們手動(dòng)添加:
點(diǎn)擊ADD按鈕,然后在彈出的文件瀏覽中,選擇“C:\Program Files\ARM\Multi-ICE\Muti-ICE.dll”(默認(rèn)安裝的話)。然后點(diǎn)擊“確定”。這樣就把MutiICE的調(diào)試接口安裝上了。
2,怎么保存當(dāng)前的調(diào)試現(xiàn)場(chǎng)。
我們?cè)谡{(diào)試過程中,經(jīng)常需要在不同的地方設(shè)置斷點(diǎn)、設(shè)置Watchpoint或打開非常多 source文件。不過,一旦我們關(guān)閉了AXD,所有的工 作都白費(fèi)了。當(dāng)我們?cè)俅未蜷_AXD后,我們得到的仍然是沒有所有斷點(diǎn)、只打開一個(gè)entry文件的調(diào)試環(huán)境。這里介紹一種方法能自動(dòng)保存上一次的調(diào)試現(xiàn) 場(chǎng)(寄存器的數(shù)據(jù)都是保存的)。
Options->General tab. 這里確認(rèn)Save and load default sessions 選項(xiàng) 是選中的。然后打開Session File,確保Rselect Target和Reload images 選項(xiàng)是選中的。
在設(shè)置保存后,我們?cè)陉P(guān)閉AXD后,再次啟動(dòng),就會(huì)自動(dòng)加載上次的image,恢復(fù)寄存器了。
如果需要保存多個(gè)現(xiàn)場(chǎng),那么就在設(shè)置保存后,在File菜單中選擇Save Session來進(jìn)行保存。不過注意,保存的路徑中不能 有空格和特別字符。最佳保存在ClearCase上。在需要恢復(fù)現(xiàn)場(chǎng)的時(shí)候,只需要Load Session就一切OK。你以前辛辛苦苦設(shè)置的斷點(diǎn)、 Watchpoint全都回來了。
3,不能設(shè)置斷點(diǎn),怎么辦?
不能設(shè)置斷點(diǎn)時(shí),我僅知有幾種解決方案,這里列舉一下:
A:清空CPU的Vector Catch 。
在Options->Configure Process..中清除。
B:Run一下,馬上暫停。
這種方式對(duì)需求不高的斷點(diǎn)(諸如設(shè)置在APP層中的斷點(diǎn))比較合適。方便。
C:清除以前的斷點(diǎn)。
一般發(fā)生在Flash調(diào)試的情況。首先清除以前的斷點(diǎn),然后才能設(shè)置新的斷點(diǎn)。
D:命令行 spp vector_catch 0
其實(shí)和A相同。如果寫在開機(jī)script中,那么就能自動(dòng)排除開機(jī)無法設(shè)置斷點(diǎn)問題。
E:?jiǎn)?dòng)AXD的時(shí)候使用?debug這個(gè)參數(shù),這樣就能添加一個(gè)自動(dòng)斷點(diǎn)在Main()上。
4 ,怎么不reload image就能重新從頭開始調(diào)試。
非常多時(shí)候我們需要讓代碼重頭跑起來復(fù)現(xiàn)一個(gè)bug。不過,一般來說,都是reload一下。如果image比較小還能忍受,不過想660那種16M左右的巨型image,這種代價(jià)就未免太大。這里介紹幾種我所知道的方法,能從頭開始調(diào)試:
A:設(shè)置Current寄存器。
點(diǎn)擊 打開process register->current 組。設(shè)置pc為0 , cpsr為 svc模式下。關(guān)閉Thumb模式。這時(shí)F5即可運(yùn)行下去。
B:運(yùn)行腳本
這種方式速度更快,也方便。上上之選。
setpc 0
sreg cpsr 0xd3
5,怎么無條件跳轉(zhuǎn)?
一般這種事情最佳是在同一個(gè)函數(shù)中,某條語句無條件跳到另一條語句上時(shí)使用。最佳不要跨函數(shù)使用(否則有堆棧錯(cuò)誤,非常難查的)
把光標(biāo)定在需要跳轉(zhuǎn)到的代碼上,右鍵菜單execute->Set Next Statement .
6,AXD有沒有什么輔助工具?
有的。
IDA pro ,非常好的axf解析工具。能統(tǒng)計(jì)axf文件中的函數(shù)、全局變量、調(diào)用關(guān)系等。界面非常友好,代碼界面能清晰看出函數(shù)引用關(guān)系、變量初始話、變量引用、修改的統(tǒng)計(jì)。
能說,IDA Pro是匯編級(jí)的Source insight 。大家能在網(wǎng)絡(luò)上下載他的最新版安裝使用。
7,怎么調(diào)試需要加載到Flash上的代碼
以下是我的經(jīng)驗(yàn):
1、 在有jTag調(diào)試口的板子上Download一個(gè)版本。
2、 選擇 File->load debug symbols 。然后選擇CodeWarrior上Release版生成的那個(gè)AXF。
3、 目前就能調(diào)試Flash上的程式了。和Debug完全相同。不過注意,在這種情況下,一般只能設(shè)置2個(gè)斷點(diǎn)。
8,使用fromelf命令
fromelf命令能對(duì)我們生成的axf文件進(jìn)行進(jìn)一步操作的命令。
諸如:
從axf文件中抽出二進(jìn)制代碼:fromelf ?bin ?output a.bin a.axf
從axf文件中抽出二進(jìn)制代碼:fromelf ?m32 ?output a.s32 a.axf
9,F(xiàn)AQ
Q: 生成的ram方式的redboot映像文件,應(yīng)該使用什么工具調(diào)試編譯的ram方式的redboot。
用ADS調(diào)試工具只能加載.axf格式的文件
A: 用ADS還能加載bin文件(File->Load Memory From Memory...),能使用ADS命令行或腳本初始化SDRAM
load bin文件時(shí)需要指定載入地址,對(duì)于s3c44b0x通常為0x0c040000,即在相應(yīng)的ldi文件中指定的
SECTION_rom_vectors (ram, 0x0c040000, LMA_EQ_VMA)
將BIN程式Load后,將PC指針修改為0X0C040000即可