デバッグ情報ファイル:レコード

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

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

[目次]