GDB+Jlink调试注意事项

1.在汇编调用C的一步要用“Step in”,不要用“Step Over”,因为main对于汇编来说只是一个函数。会造成程序全速运行,不能单步调试。对于汇编代码,“Step in“Step Over”是一样的效果,所以在进行main函数之前最好都用“Step in”。

GDB+Jlink调试注意事项_第1张图片

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没有完全初始化好。

见这里:http://my.csdn.net/kangear/code/detail/54584


4.Target request failed: Infinite loop detected

GDB+Jlink调试注意事项_第2张图片

翻译过来就能理解,这是一个无限循环,再往下单步运行没有意义。就提示了如下信息。


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
  调试时候会出现这个错误。
GDB+Jlink调试注意事项_第3张图片

8.当你的程序不能停到断点处的时候,从以下两处找原因。

   1> 编译程序的时候是否加了-g,生成可调试的应用程序。否则arm-linux-gdb找不到调试的符号表。
   2> gdbinit脚本中是否有break



你可能感兴趣的:(gdb,Jlink)