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没有完全初始化好。
见这里:http://my.csdn.net/kangear/code/detail/54584
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