0
我想逐步調試由鏈接器從多個目標文件形成的程序的來源。使用gdb(目標分支)通過openocd調試多源(asm和c)程序
爲簡單起見,我假設一個源文件是一個程序集文件,其中啓動例程位於另一個文件夾中,另一個文件是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 $< [email protected]
$(C_BASEN).elf: $(LDSCRIPT) $(AS_BASEN).o $(C_BASEN).o
$(PREFIX)/arm-ld $(LDFLAGS) -T $(LDSCRIPT) $(AS_BASEN).o $(C_BASEN).o -o [email protected]
$(C_BASEN).o: $(C_BASEN).c
$(PREFIX)/arm-gcc $(CFLAGS) -c $< -o [email protected]
$(AS_BASEN).o: $(AS_BASEN).s Makefile
$(PREFIX)/arm-as $(ASFLAGS) $< -o [email protected]
建立Altough我認爲我的問題是OpenOCD的的independet我州爲了完整起見,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源,在那裏我可以繼續逐步執行。
嘿謝謝你的貢獻。如果我很快就解決不了問題,我會考慮更新我的手臂工具鏈。雖然,根據我的經驗,大多數時候錯誤並不在程序本身,而是缺少缺少背景信息。所以我還是會等待一段時間的回覆。 – user1146332 2012-04-12 09:33:29