Перейти к основному содержимому
Перейти к основному содержимому

DWARF

Входные данныеВыходные данныеПсевдоним

Описание

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

Настройки формата