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

Gcc 通过openocd使用gdb(目标arm)调试多源(asm和c)程序,gcc,gdb,arm,openocd,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文件。该程序由以下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 $@
PREFIX=/opt/arm/bin
LDSCRIPT=ld.script
AS_BASEN=$(basename startup.s)
C_BASEN=$(basename main.C)
ASFLAGS=-g
CCFLAGS=-g-nostartfiles
LDFLAGS=--致命警告
$(C_BASEN).bin:$(C_BASEN).elf
$(前缀)/arm对象复制-O二进制$<$@
$(C\u BASEN.elf:$(LDSCRIPT)$(AS\u BASEN.o$(C\u BASEN.o)
$(前缀)/arm-ld$(LDFLAGS)-T$(LDSCRIPT)$(AS\u-BASEN.o$(C\u-BASEN.o-o$@
$(C_BASEN).o:$(C_BASEN).C
$(前缀)/arm gcc$(CFLAGS)-c$<-o$@
$(AS\u BASEN).o:$(AS\u BASEN).s生成文件
$(前缀)/arm as$(ASFLAGS)$<-o$@
虽然我认为我的问题与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"' 

nclocalhost 4444也许您可以尝试这些工具的不同版本(如果其中的某些bug抑制了预期的行为)。试试看这里

嘿,谢谢你的贡献。如果我不能很快解决这个问题,我会考虑更新我的手臂工具链。虽然,根据我的经验,大多数时候错误不在于节目本身,而在于缺少背景信息。因此,我仍将等待一段时间的答复。