DWARF
Input | Output | Alias |
---|---|---|
✔ | ✗ |
説明
DWARF
フォーマットは ELF ファイル(実行ファイル、ライブラリ、またはオブジェクトファイル)から DWARF デバッグシンボルを解析します。
これは dwarfdump
に似ていますが、はるかに高速(毎秒数百 MB)で、SQL をサポートしています。
.debug_info
セクション内の各デバッグ情報エントリ (DIE) に対して 1 行を生成し、DWARF エンコーディングがツリー内の子リストを終了するために使用する「null」エントリを含みます。
参考
.debug_info
はコンパイルユニットに対応する units で構成されています:
- 各ユニットは DIE のツリーであり、
compile_unit
DIE がそのルートです。 - 各 DIE には tag と attributes のリストがあります。
- 各属性には name と value があり(また、値がどのようにエンコードされるかを指定する form もあります)。
DIE はソースコードからの要素を表しており、その tag によってそれが何の要素であるかを示します。例えば、以下のようなものがあります:
- 関数 (tag =
subprogram
) - クラス/構造体/列挙型 (
class_type
/structure_type
/enumeration_type
) - 変数 (
variable
) - 関数の引数 (
formal_parameter
)
ツリー構造は対応するソースコードを反映しています。例えば、class_type
DIE はクラスのメソッドを表す subprogram
DIE を含むことができます。
DWARF
フォーマットは以下のカラムを出力します:
offset
-.debug_info
セクション内の DIE の位置size
- エンコードされた DIE のバイト数(属性を含む)tag
- DIE のタイプ;通常の「DW_TAG_」接頭辞は省略されますunit_name
- この DIE を含むコンパイルユニットの名前unit_offset
- この DIE を含むコンパイルユニットが.debug_info
セクション内に位置する場所ancestor_tags
- ツリー内の現在の DIE の先祖のタグの配列、内側から外側への順序でancestor_offsets
- 先祖のオフセット、ancestor_tags
に平行- 利便性のために属性配列から複製された一般的な属性のいくつか:
name
linkage_name
- 修飾された完全修飾名;通常は関数のみが持ちます(しかし全ての関数ではありません)decl_file
- このエンティティが宣言されたソースコードファイルの名前decl_line
- このエンティティが宣言されたソースコード内の行番号
- 属性を記述する平行配列:
attr_name
- 属性の名前;通常の「DW_AT_」接頭辞は省略されますattr_form
- 属性がどのようにエンコードされ解釈されるか;通常の DW_FORM_ 接頭辞は省略されますattr_int
- 属性の整数値;属性が数値の値を持たない場合は 0attr_str
- 属性の文字列値;属性が文字列の値を持たない場合は空
使用例
DWARF
フォーマットは、関数定義(テンプレートインスタンス化やインクルードされたヘッダーファイルからの関数を含む)が最も多いコンパイルユニットを見つけるために使用できます: