通过openocd用gdb(目标arm)调试多源(asm和c)程序

时间:2012-04-11 11:36:06

标签: gcc gdb arm openocd

我想逐步调试由多个目标文件中的链接器形成的程序源。

为简单起见,我假设一个源是汇编文件,其中启动例程位于其中,另一个是c文件。该程序由以下makefile构建

 PREFIX=/opt/arm/bin
 LDSCRIPT=ld.script
 AS_BASEN=$(basename startup.s)
 C_BASEN=$(basename main.c)
 ASFLAGS=-g
 CCFLAGS=-g -nostartfiles
 LDFLAGS=--fatal-warnings    

 $(C_BASEN).bin: $(C_BASEN).elf
    $(PREFIX)/arm-objcopy -O binary $< $@

 $(C_BASEN).elf: $(LDSCRIPT) $(AS_BASEN).o $(C_BASEN).o
    $(PREFIX)/arm-ld $(LDFLAGS) -T $(LDSCRIPT) $(AS_BASEN).o $(C_BASEN).o -o $@

 $(C_BASEN).o: $(C_BASEN).c
    $(PREFIX)/arm-gcc $(CFLAGS) -c $< -o $@

 $(AS_BASEN).o: $(AS_BASEN).s Makefile
    $(PREFIX)/arm-as $(ASFLAGS) $< -o $@

Altough我认为我的问题是openocd的独立性我为了完整性而陈述了openocd特定部分。在openocd守护程序启动后,我使用以下命令启动调试会话。

 nc localhost 4444 <<eof
 soft_reset_halt
 load_image `pwd`/main.bin $memory_location
 step $memory_location
 exit
 eof
 ddd --debugger 'arm-gdb -ex "target remote localhost:3333"' 

其中$ memory_location是.text部分的第一个地址。在ddd打开后,程序停在所需的地址,我可以照常单步执行装配线。最后我到达跳转指令,跳转到位于c文件中的函数。再过一步,gdb在执行程序时不再响应。

也许你们中的一位专家可以给我一个提示我必须改变的内容,以便gdb此时切换到c-source,我可以继续逐步执行。

1 个答案:

答案 0 :(得分:0)

也许您可以尝试使用这些工具的不同版本(如果它们中的某些错误会阻止预期的行为)。试试看http://www.comsytec.com/products/gnu-binaries/gcc-binaries.html