DWARF
| Input | Output | Alias |
|---|---|---|
| ✔ | ✗ |
説明
DWARF フォーマットは、ELF ファイル(実行ファイル、ライブラリ、またはオブジェクトファイル)から DWARF デバッグシンボルをパースします。
dwarfdump に似ていますが、はるかに高速(数百 MB/s)で動作し、SQL をサポートします。
.debug_info セクション内の各 Debug Information Entry (DIE) ごとに 1 行を出力し、さらに、DWARF エンコーディングがツリー内の子リストを終端するために使用する「null」エントリも含みます。
参考文献
.debug_info は unit から構成されており、これはコンパイル単位に対応します:
- 各 unit は DIE の木構造であり、ルートには
compile_unitDIE が存在します。 - 各 DIE は tag と attribute のリストを持ちます。
- 各 attribute は name と value(および、その値がどのようにエンコードされているかを指定する form)を持ちます。
DIE はソースコード中のさまざまな要素を表し、その tag によって何を表しているかが分かります。例えば次のようなものがあります:
- 関数(tag =
subprogram) - クラス / 構造体 / enum(
class_type/structure_type/enumeration_type) - 変数(
variable) - 関数引数(
formal_parameter)
ツリー構造は対応するソースコードを反映しています。例えば、class_type DIE は、そのクラスのメソッドを表す subprogram DIE を含むことができます。
DWARF フォーマットは次の列を出力します:
offset-.debug_infoセクション内での DIE の位置size- エンコードされた DIE のバイト数(attribute を含む)tag- DIE の種類。慣例的な"DW_TAG_"プレフィックスは省略されていますunit_name- この DIE を含むコンパイル単位の名前unit_offset- この DIE を含むコンパイル単位の.debug_infoセクション内での位置ancestor_tags- 現在の DIE の祖先となるタグの配列(内側から外側の順)ancestor_offsets- 祖先のオフセットの配列で、ancestor_tagsと並行- 利便性のために、attribute 配列から複製された、よく使われる attribute:
namelinkage_name- マングルされた完全修飾名。通常は関数のみに存在します(すべての関数にあるとは限りません)decl_file- このエンティティが宣言されたソースコードファイル名decl_line- このエンティティが宣言されたソースコード中の行番号
- attribute を表現する並行配列:
attr_name- attribute の名前。慣例的な"DW_AT_"プレフィックスは省略されていますattr_form- attribute がどのようにエンコードおよび解釈されるか。慣例的なDW_FORM_プレフィックスは省略されていますattr_int- attribute の整数値。attribute に数値がない場合は 0attr_str- attribute の文字列値。attribute に文字列がない場合は空文字列
使用例
DWARF 形式を使うと、最も多くの関数定義(テンプレートのインスタンス化や、インクルードされたヘッダーファイル内の関数を含む)を持つコンパイル単位を特定できます。