5

C/C++ ソース ファイル内の任意の要素について、コンパイルされた実行可能ファイル内の対応するメモリ位置を特定できるようにしたいと考えています。デバッグを使用してコンパイルし、結果の DWARF 情報を使用することは、これに向けて大いに役立ちますが、私の目標にはほど遠いものです。GCC は、行番号のみで DWARF .debug_line 情報を生成し、列番号を 0 のままにしているようです! DWARF仕様で列番号を指定できるのは奇妙に思えますが、GCCは列番号を生成していないようです。

不足しているものはありますか? おそらく、デバッグ情報に列が必要であることを GCC に知らせるための構成またはコマンド ライン パラメータがありますか? それとも、私の目標を達成するためのまったく別の方法があるのでしょうか?

以下は、DWARF に列番号がないことを示す簡単なコードです。

int f(int x)
{
    x = 0; x++;
    return x;
}

これを次のようにコンパイルします。

gcc -g -c test.c

次に、次のコマンドで DWARF 情報を表示します。

dwarfdump -l test.o

出力は次のとおりです。

.debug_line: line number info for a single cu
Source lines (from CU-DIE at .debug_info offset 0x0000000b):

<pc>        [row,col] NS BB ET PE EB IS= DI= uri: "filepath"
NS new statement, BB new basic block, ET end of text sequence
PE prologue end, EB epilogue begin
IA=val ISA number, DI=val discriminator value
0x00000000  [   2, 0] NS uri: "test.c"
0x00000007  [   3, 0] NS
0x00000012  [   4, 0] NS
0x00000015  [   5, 0] NS
0x00000017  [   5, 0] NS ET
4

1 に答える 1