| Ввод | Вывод | Псевдоним |
|---|---|---|
| ✔ | ✗ |
Описание
Формат DWARF разбирает отладочные символы DWARF из ELF-файла (исполняемого файла, библиотеки или объектного файла).
Он похож на dwarfdump, но работает значительно быстрее (сотни МБ/с) и поддерживает SQL.
Он создаёт одну строку для каждой записи Debug Information Entry (DIE) в секции .debug_info
и включает записи null, которые кодировка DWARF использует для завершения списков дочерних элементов в дереве.
Формат DWARF выводит следующие столбцы:
offset- позиция DIE в секции.debug_infosize- количество байтов в закодированном DIE (включая атрибуты)tag- тип DIE; общепринятый префикс "DW_TAG_" опущенunit_name- имя единицы компиляции, содержащей этот DIEunit_offset- позиция единицы компиляции, содержащей этот DIE, в секции.debug_infoancestor_tags- массив тегов предков текущего DIE в дереве, в порядке от ближайшего к наиболее удалённомуancestor_offsets- смещения предков, соответствующиеancestor_tags- несколько распространённых атрибутов, продублированных из массива атрибутов для удобства:
namelinkage_name- манглированное полное квалифицированное имя; обычно есть только у функций (но не у всех)decl_file- имя файла исходного кода, где была объявлена эта сущностьdecl_line- номер строки в исходном коде, где была объявлена эта сущность
- параллельные массивы, описывающие атрибуты:
attr_name- имя атрибута; общепринятый префикс "DW_AT_" опущенattr_form- способ кодирования и интерпретации атрибута; общепринятый префикс DW_FORM_ опущенattr_int- целочисленное значение атрибута; 0, если у атрибута нет числового значенияattr_str- строковое значение атрибута; пустая строка, если у атрибута нет строкового значения
Пример использования
Формат DWARF можно использовать для поиска единиц компиляции, содержащих наибольшее число определений функций (включая инстанцирования шаблонов и функции из подключаемых файлов заголовков):
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.)
Пиковое потребление памяти: 271.92 MiB.