DWARF
| Входные данные | Выходные данные | Псевдоним | 
|---|---|---|
| ✔ | ✗ | 
Описание
Формат DWARF разбирает символы отладки DWARF из ELF файла (исполняемый файл, библиотека или объектный файл).
Он аналогичен dwarfdump, но гораздо быстрее (сотни МБ/с) и поддерживает SQL.
Он производит одну строку для каждого элемента отладочной информации (DIE) в разделе .debug_info
и включает "нулевые" записи, которые кодировка DWARF использует для завершения списков дочерних элементов в дереве.
.debug_info состоит из единиц, которые соответствуют единицам компиляции:
- Каждая единица представляет собой дерево DIE, с compile_unitDIE в качестве корня.
- Каждый 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- имя единицы компиляции, содержащей этот DIE
- unit_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 можно использовать для поиска единиц компиляции, которые содержат наибольшее количество определений функций (включая инстанциации шаблонов и функции из включенных заголовочных файлов):
