2009-08-14 5 views
3

アセンブリでgdbの行番号デバッグ情報をGASに送信する方法を理解できません。私はavr-gccクロスコンパイラを使用していますが、それが適切かどうかは疑問です。(AVR)アセンブリのシングルステップラインにGNU ASが行ごとのデバッグ情報やGDBを出力する方法を教えてください。

以下のコマンドラインオプションを使用してアセンブルしています: avr-gcc -g -ggdb -Os -mmcu = atmega644 -function-sections -fsigned-char -Winvalid-pch -Wall -Wno-long-long -xアセンブラと-with-cpp -Wa、-ggdb -c -o z813.o z813.s

Cコードをコンパイルするのにほぼ同じ引数セットを使用すると、行番号とソースファイルの拡張が表示されます'objdump -l -d'を使用します。

ただし、アセンブリオブジェクトには何もありません。それはシンボル名と情報を認識しないものの、すなわち

(simulavrリモートGDB接続を介して)

000000d4 <run_timetable>: 
     d4:  0e 94 57 00  call 0xae ; 0xae <run_timetable_row> 
     d8:  0e 94 b4 00  call 0x168 ; 0x168 <delay> 

vs 

00000f9c : 
main(): 
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:68 
    f9c:  0e 94 ae 07  call 0xf5c ; 0xf5c <init> 
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:70 
    fa0:  0e 94 6a 00  call 0xd4 ; 0xd4 <run_timetable> 

ときAVR-GDBで、私は、私の組み立てコードを単一のステップにデバッガを取得することはできません。私はこれが関連していると思います。

これをinfo/man/googleで見つけようとしている可能性があります。どんな助けにも感謝!

答えて

3

アセンブラソースコードを "コンパイル"するとき、Cコンパイラを起動するのはやや難題です。コンパイラは、入力がCファイルであることを認識し、-gおよび-Osなど、Cコンパイルに影響を与えるオプションを無視します。コンパイラ行に "-v"を渡すと、実際にアセンブラに渡されるオプションが表示されます。

私は

avr-as --gstabs -mmcu=atmega644 a.s -o a.o 

で組み立てたとき、私はオブジェクト・ファイルに見栄えの良いソース行情報を取得します。 avr-as(2.18.0)の私のバージョンは-gg、--gstabs、--gstabs +、--gdwarf-2しか持っていません。 stabsを使用すると、objdumpは行を表示できます。 dwarf-2では、そうではありません。objdumpのバグかどうかはわかりません。

"gcc"としてアセンブラを起動することを絶対にお勧めする場合は、-Wa、 - gstabsを渡す必要があります。

+0

ありがとうございました! --gstabsオプションを使用しました。私が試みていた無効な-ggdbオプションについて苦情を受けなかった理由はわかりません(実際にはうまくいきませんでしたが、私が - dwarf-2設定から変更したと思います)後でそのモードのための別個の行番号ファイルのためのオプション)。 私は完全なプリプロセッサを必要とするため、gcc経由で実行していますが、無視されたフラグや渡されたフラグも不明です。ガスから直接cppを呼び出す方法を理解することはできませんが、あなたは私のフラグを整える時間をとるように促しました。:) – braddock

+0

私は今、avr-asの最新バージョンにバグがあることを知りましたこれにより、アセンブリ内のgdwarf-2デバッグシンボルが正しく出力されなくなります。 ここでの詳細、パッチ、パッチ付きバイナリ: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=77693 – braddock

+0

「as」(gccではなく)を直接起動すると、 '-g'私のために働いた。 '--gstabs'がうまく動作しない場合は試してみる価値があります。構成はさまざまです。 – doug65536

関連する問題