デバッグ情報ファイルすべてのレコードを順に説明します。
VER V:num
デバッグ情報ファイルのバージョン番号で、2000/01 現在、num は「1」です。このレコードは、デバッグ情報ファイルの先頭に 1 つだけ出力されます。
例 VER V:1 FILE L:num F:fname
ソース ファイルを示します。num はソース ファイルの全行数、fname はファイル名またはパス名です。これ以降の N、PROC、GS、LS などの各レコードで示される項目は、このファイルに属します。
99/12 現在、インクルード ファイル内の行番号情報は出力されないため、このレコードはファイルに 1 つしか出力されません。
例 FILE L:23 F:prime.c N L:num A:addr
ソース コード行と実行イメージ アドレスの対応を示します。num は、直前の FILE レコードで示されたソース ファイルの行番号 (1 ベース) です。addr は、対応する絶対アドレスです。
例 N L:10 A:0x48 PROC S:name T:C A:addr B:end-addr C:attr-str ZA:arg-sz ZC:cod-sz ZL:loc-sz
プロシージャ (関数) と実行イメージ アドレスの対応を示します。name はプロシージャ名、addr はプロシージャ先頭の絶対アドレス、end-addr は末尾の絶対アドレス (このプロシージャに属さない最初のアドレス) です。オプションの C:attr-str は、追加属性を通知します。
arg-sz、cod-sz、loc-sz は、それぞれスタックに積まれた引数、リターン アドレス、およびローカル変数のサイズを示します。これらの情報は、関数のコール スタックを解析するときに役立ちます。
これ以降の LS レコードで示されるローカル変数と、TMP 属性の GS レコードで示される静的変数は、このプロシージャに属します。
例 PROC S:_main T:C A:0x0 B:0x63 GS S:name T:type A:addr C:attr-str
グローバル ラベル (変数) と実行イメージ アドレスの対応を示します。name はラベル名、type はそのラベルのタイプ (型)、addr は対応する絶対アドレスです。C:attr-str は省略される場合もあり、各種の追加属性を通知します。
例 GS S:a2? T:A[2].I1 A:0x4 C:FS,TMP LS S:name T:type O:offs C:attr-str
スタック上のローカル ラベルと実行イメージ アドレスの対応を示します。プロシージャへの引数もこのレコードで示されます。offs はレジスタ BP 相対オフセットで、正負に応じて先頭に「+」か「-」が付きます。引数では正、ローカル変数では負になります。ほかのフィールドは GS レコードと同じです。
例 LS S:found$ T:I2 O:-6 SUTAG S:tag-name
構造体または共用体の型定義を開始します。tag-name はタグ名 (型名) です。SUTAG レコードの後には 0 以上の _FLD レコードが続き、最後に SUEND レコードが置かれます。これらで 1 つの構造体または共用体を定義します。
SUTAG レコードで定義されたタグ名は、後続の GS、LS、または _FLD レコードの T フィールドの値で使用されます (T:T[tag_name])。
次は、Light C の stdio.h で定義されている _FILE 構造体を表すデバッグ情報です。
例 SUTAG S:_FILE _FLD S:hdl T:U2 O:0 _FLD S:flags T:I2 O:2 _FLD S:bufsz T:U2 O:4 _FLD S:vlen T:U2 O:6 _FLD S:idx T:U2 O:8 _FLD S:buffer T:P2.I1 O:10 _FLD S:link T:P2.S[_FILE] O:12 ← 自己参照 _FLD S:pos T:I4 O:14 _FLD S:fname T:A[14].I1 O:18 SUEND O:32 _FLD S:name T:type O:offs B:bit-offs Z:bit-size
構造体または共用体のメンバを示します。name はメンバ名、type はそのタイプ、offs はメンバのオフセットです。共用体の場合は、すべてのメンバで offs が 0 になります。
ビットフィールドでは、B および Z フィールドが出力されます。B フィールドはオフセット (最下位ビットの位置) を示し、Z フィールドはビットサイズを示します。次の例をご覧ください。
例 // ソースコード struct st_t { int a:2; int b:3; int c:4; int d:1; }; ; デバッグ情報 SUTAG S:st_t _FLD S:a T:I2 O:0 B:0 Z:2 _FLD S:b T:I2 O:0 B:2 Z:3 _FLD S:c T:I2 O:0 B:5 Z:4 _FLD S:d T:I2 O:0 B:9 Z:1 SUEND O:2 SUEND O:offs
構造体または共用体の型定義を終了します。offs は終端のオフセット、つまり構造体/共用体のサイズです。