1. 程式人生 > >GDB+Jlink除錯注意事項

GDB+Jlink除錯注意事項

1.在彙編呼叫C的一步要用“Step in”,不要用“Step Over”,因為main對於彙編來說只是一個函式。會造成程式全速執行,不能單步除錯。對於彙編程式碼,“Step in“Step Over”是一樣的效果,所以在進行main函式之前最好都用“Step in”。


2. 在原始碼中只修改了Makefile和連結指令碼時候,要先清理一下再重新編譯。因為make的潛規則是隻檢測原始碼是否改變。會遇到如下提示:

**** Build of configuration Default for project mmuv1 ****


make all 
make: Nothing to be done for `all'.



3.Cannot access memory at address 0xbfea4450 和 0x00000000 in ?? () 

以前也遇到過這個問題,沒有記錄,最近一次遇到是在S5PV210上在寫DDRAM初始化指令碼的過程中遇到,並解決。是DDRAM沒有完全初始化好。

4.Target request failed: Infinite loop detected


翻譯過來就能理解,這是一個無限迴圈,再往下單步執行沒有意義。就提示瞭如下資訊。

5.gdbinit指令碼中break _start設定斷點,卻沒有設定到_start連結地址對應的行號,而是下一條指令對應的行號


解決過程:        通過readelf -wl led.elf > led_elf.line的內容可以看到:  Line Number Statements:   Extended opcode 2: set Address to 0x20000000   Special opcode 13: advance Address by 0 to 0x20000000
 and Line by 8 to 9   Special opcode 36: advance Address by 4 to 0x20000004 and Line by 3 to 12   Special opcode 34: advance Address by 4 to 0x20000008 and Line by 1 to 13   Special opcode 34: advance Address by 4 to 0x2000000c and Line by 1 to 14   Special opcode 35: advance Address by 4 to 0x20000010 and Line by 2 to 16   Special opcode 35: advance Address by 4 to 0x20000014 and Line by 2 to 18   Special opcode 35: advance Address by 4 to 0x20000018 and Line by 2 to 20   Advance PC by 12 to 0x20000024   Extended opcode 1: End of Sequence 連結地址對應的行號是沒有問題的,說明編譯器沒有問題。arm-linux-gdb發出的"break _start"應該也沒有什麼錯誤。jlinkGDBServer在處理結果上令人咋舌了。向後偏移了一條指令。 6.Cortex-A8在除錯彙編時的“Step Over”

   Cortex-A8在除錯彙編的時候,是支援的"Step Over","Step Into","Step Return",ARM9只有"Step Into"的,"Step Over"和"Step Into"功能是一樣的。 7.Remote connection closed   除錯時候會出現這個錯誤。
8.當你的程式不能停到斷點處的時候,從以下兩處找原因。    1> 編譯程式的時候是否加了-g,生成可除錯的應用程式。否則arm-linux-gdb找不到除錯的符號表。    2> gdbinit指令碼中是否有break