| 入力 | 出力 | 別名 |
|---|---|---|
| ✔ | ✗ |
説明
DWARF フォーマットは、ELF ファイル (実行可能ファイル、ライブラリ、またはオブジェクトファイル) から DWARF デバッグシンボルを解析します。
dwarfdump に似ていますが、はるかに高速で (数百 MB/s) 、SQL もサポートしています。
.debug_info セクション内の各 Debug Information Entry (DIE) ごとに 1 行を生成し、
DWARF エンコーディングでツリー内の子要素リストの終端に使われる "null" エントリも含まれます。
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:
namelinkage_name- マングルされた完全修飾名。通常これを持つのは関数だけです (ただし、すべての関数ではありません)decl_file- この entity が宣言されたソースコードファイルの名前decl_line- この entity が宣言されたソースコード内の行番号
- attributes を表す並列配列:
attr_name- attribute の名前。慣例的な "DW_AT_" プレフィックスは省略されますattr_form- attribute がどのようにエンコードされ、解釈されるか。慣例的な DW_FORM_ プレフィックスは省略されますattr_int- attribute の整数値。attribute が数値を持たない場合は 0attr_str- attribute の文字列値。attribute が文字列値を持たない場合は空
使用例
DWARFフォーマットを使用すると、最も多くの関数定義 (Template のインスタンス化や、インクルードされたヘッダーファイル内の関数を含む) を持つコンパイル単位を見つけることができます。
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┌─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.