DWARF
| Input | Output | Alias |
|---|---|---|
| ✔ | ✗ |
Описание
Формат 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_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 можно использовать для поиска единиц компиляции, содержащих наибольшее количество определений функций (включая инстанциации шаблонов и функции из включаемых заголовочных файлов):