DWARF
| Входные данные | Выходные данные | Псевдоним |
|---|---|---|
| ✔ | ✗ |
Описание
Формат DWARF разбирает отладочные символы DWARF из ELF-файла (исполняемого файла, библиотеки или объектного файла).
Он аналогичен dwarfdump, но гораздо быстрее (сотни МБ/с) и поддерживает SQL.
Он формирует одну строку для каждой Debug Information Entry (DIE) в секции .debug_info
и включает «нулевые» записи, которые кодировка DWARF использует для завершения списков дочерних элементов в дереве.
.debug_info состоит из unit-ов, которые соответствуют единицам компиляции:
- Каждый unit — это дерево DIE с
compile_unitDIE в качестве корня. - Каждый DIE имеет tag и список attributes.
- Каждый attribute имеет name и value (а также form, который определяет, как закодировано значение).
Записи DIE представляют сущности из исходного кода, и их tag указывает, что это за сущность. Например, есть:
- функции (tag =
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— преобразованное (mangled) полностью квалифицированное имя; обычно оно есть только у функций (и не у всех)decl_file— имя файла исходного кода, в котором эта сущность была объявленаdecl_line— номер строки в исходном коде, в которой эта сущность была объявлена
- параллельные массивы, описывающие атрибуты:
attr_name— имя атрибута; традиционный префиксDW_AT_опущенattr_form— то, как атрибут закодирован и интерпретируется; традиционный префиксDW_FORM_опущенattr_int— целочисленное значение атрибута; 0, если атрибут не имеет числового значенияattr_str— строковое значение атрибута; пустая строка, если атрибут не имеет строкового значения
Пример использования
Формат DWARF можно использовать, чтобы найти единицы компиляции, которые содержат наибольшее число определений функций (включая инстанцирования шаблонов и функции из подключаемых заголовочных файлов):