レコード

デバッグ情報ファイルすべてのレコードを説明します。

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-szcod-szloc-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 は終端のオフセット、つまり構造体/共用体のサイズです。