2012-04-11 10 views
0

複数のオブジェクトファイルからリンカによって形成されたプログラムのソースを段階的にデバッグしたい。openocd経由でgdb(ターゲットアーム)を使ってマルチソース(asmとc)プログラムをデバッグ

簡単にするために、1つのソースがアセンブリファイルであり、スタートアップルーチンが存在し、もう1つがcファイルであると仮定します。プログラムは、私は私の問題は、私は完全を期すためopenocd特定の部分を述べるopenocdのindependetだと思いAltough次のメイクファイル

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] 

によって構築されます。 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がもう1つのステップの後に応答しません。

多分あなたの専門家が私に何を変えなければならないかのヒントを与えることができるので、gdbはこの段階でc-sourceに切り替えて、ステップワイズ実行を続けることができます。

答えて

0

多分これらのツールの異なるバージョンを試すことができます(それらの中のいくつかのバグが予想される動作を妨げる場合)。ここをクリックしてくださいhttp://www.comsytec.com/products/gnu-binaries/gcc-binaries.html

+0

お寄せいただきありがとうございます。私はすぐに問題を解決できない場合、私は私の腕のツールチェーンを更新することを考えます。私の経験ではほとんどの場合、間違いはプログラムそのものではなく、むしろ欠落している背景情報の欠如です。だから私はまだ返信をしばらくお待ちしています。 – user1146332

関連する問題