メインコンテンツへスキップ
入力出力別名

説明

DWARF フォーマットは、ELF ファイル (実行可能ファイル、ライブラリ、またはオブジェクトファイル) から DWARF デバッグシンボルを解析します。 dwarfdump に似ていますが、はるかに高速で (数百 MB/s) 、SQL もサポートしています。 .debug_info セクション内の各 Debug Information Entry (DIE) ごとに 1 行を生成し、 DWARF エンコーディングでツリー内の子要素リストの終端に使われる “null” エントリも含まれます。
.debug_infounit で構成されており、これはコンパイル単位に対応します。
  • 各 unit は DIE のツリーで、compile_unit DIE がそのルートです。
  • 各 DIE は tagattribute のリストを持ちます。
  • 各 attribute は namevalue (および、値がどのようにエンコードされるかを指定する form) を持ちます。
DIE はソースコード内のさまざまな要素を表し、その tag によって何を表しているかがわかります。たとえば、次のようなものがあります。
  • 関数 (tag = subprogram)
  • クラス / structs / enums (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 の祖先の tag の配列。最も内側から最も外側の順
  • ancestor_offsets - ancestor_tags に対応する祖先の offset
  • 利便性のため、attributes 配列から複製された一般的な attribute:
    • name
    • linkage_name - マングルされた完全修飾名。通常これを持つのは関数だけです (ただし、すべての関数ではありません)
    • decl_file - この entity が宣言されているソースコードファイルの名前
    • decl_line - この entity が宣言されているソースコード内の行番号
  • attributes を表す並列配列:
    • attr_name - attribute の名前。慣例的な “DW_AT_” プレフィックスは省略されます
    • attr_form - attribute がどのようにエンコードされ、解釈されるか。慣例的な DW_FORM_ プレフィックスは省略されます
    • attr_int - attribute の整数値。attribute が数値を持たない場合は 0
    • attr_str - attribute の文字列値。attribute が文字列値を持たない場合は空

使用例

DWARFフォーマットを使用すると、最も多くの関数定義 (Template のインスタンス化や、インクルードされたヘッダーファイル内の関数を含む) を持つコンパイル単位を見つけることができます。
Query
SELECT
    unit_name,
    count() AS c
FROM file('programs/clickhouse', DWARF)
WHERE tag = 'subprogram' AND NOT has(attr_name, 'declaration')
GROUP BY unit_name
ORDER BY c DESC
LIMIT 3
Response
┌─unit_name──────────────────────────────────────────────────┬─────c─┐
│ ./src/Core/Settings.cpp                                    │ 28939 │
│ ./src/AggregateFunctions/AggregateFunctionSumMap.cpp       │ 23327 │
│ ./src/AggregateFunctions/AggregateFunctionUniqCombined.cpp │ 22649 │
└────────────────────────────────────────────────────────────┴───────┘

3 rows in set. Elapsed: 1.487 sec. Processed 139.76 million rows, 1.12 GB (93.97 million rows/s., 752.77 MB/s.)
Peak memory usage: 271.92 MiB.

フォーマット設定

最終更新日 2026年6月10日