| Ввод | Вывод | Псевдоним |
|---|---|---|
| ✔ | ✗ |
Описание
DWARF разбирает отладочные символы DWARF из ELF-файла (исполняемого файла, библиотеки или объектного файла).
Он похож на dwarfdump, но работает значительно быстрее (сотни МБ/с) и поддерживает SQL.
Он создаёт одну строку для каждой записи Debug Information Entry (DIE) в секции .debug_info
и включает записи null, которые кодировка DWARF использует для завершения списков дочерних элементов в дереве.
.debug_info состоит из единиц, соответствующих единицам компиляции:- Каждая единица представляет собой дерево из DIE, корнем которого является DIE
compile_unit. - У каждого DIE есть tag и список атрибутов.
- У каждого атрибута есть name и value (а также form, который задаёт способ кодирования значения).
- функции (tag =
subprogram) - классы/структуры/перечисления (
class_type/structure_type/enumeration_type) - переменные (
variable) - аргументы функции (
formal_parameter).
class_type может содержать DIE subprogram, представляющие методы класса.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 можно использовать для поиска единиц компиляции, содержащих наибольшее число определений функций (включая инстанцирования шаблонов и функции из подключаемых файлов заголовков):
Query
Response