DWARF
Input | Output | Alias |
---|---|---|
✔ | ✗ |
Описание
Формат DWARF
разбирает символы отладки DWARF из ELF файла (исполняемого, библиотеки или объектного файла). Он похож на dwarfdump
, но намного быстрее (сотни МБ/с) и поддерживает SQL. Он производит одну строку для каждого элемента информации отладки (DIE) в секции .debug_info
и включает "нулевые" записи, которые кодировка DWARF использует для завершения списков дочерних элементов в дереве.
.debug_info
состоит из единиц, которые соответствуют единицам компиляции:
- Каждая единица представляет собой дерево DIE, с
compile_unit
DIE в качестве корня. - Каждый DIE имеет тег и список атрибутов.
- Каждый атрибут имеет имя и значение (а также форму, которая указывает, как значение закодировано).
DIE представляют вещи из исходного кода, и их тег указывает, какого рода это вещь. Например, существуют:
- функции (тег =
subprogram
) - классы/структуры/перечисления (
class_type
/structure_type
/enumeration_type
) - переменные (
variable
) - аргументы функций (
formal_parameter
).
Структура дерева отражает соответствующий исходный код. Например, class_type
DIE может содержать subprogram
DIE, представляющие методы класса.
Формат DWARF
выводит следующие столбцы:
offset
- позиция DIE в секции.debug_info
size
- число байт в закодированном DIE (включая атрибуты)tag
- тип DIE; общепринятый префикс "DW_TAG_" опущенunit_name
- имя единицы компиляции, содержащей этот DIEunit_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
- целочисленное значение атрибута; 0, если у атрибута нет числового значенияattr_str
- строковое значение атрибута; пустое, если у атрибута нет строкового значения
Пример использования
Формат DWARF
можно использовать для нахождения единиц компиляции, которые имеют наибольшее количество определений функций (включая инстанциации шаблонов и функции из включенных заголовочных файлов):