Введение

Стандартизированный формат данных отладки

DWARF — широко используемый стандартизированный формат данных отладки. DWARF был первоначально разработан вместе с исполняемым и компонуемым форматом (ELF), хотя он не зависит от форматов объектных файлов. Название является средневековым фантазийным дополнением к "ELF", которое изначально не имело официального значения, хотя впоследствии было предложено расшифровать его как "Debugging With Arbitrary Record Formats" (Отладка с произвольными форматами записей). DWARF включал (среди прочего) поддержку пространств имен C++, данных Fortran 90 и дополнительных методов оптимизации компилятора. В 2010 году комитет DWARF опубликовал версию 4, предлагающую "улучшенное сжатие данных, более точное описание оптимизированного кода и поддержку новых языковых возможностей C++". Версия 5 формата DWARF была опубликована в феврале 2017 года. Она "включает улучшения во многих областях: более эффективное сжатие данных, разделение данных отладки и исполняемых файлов, улучшенное описание макросов и исходных файлов, ускоренный поиск символов, улучшенная отладка оптимизированного кода, а также многочисленные улучшения функциональности и производительности".

Структура

DWARF использует структуру данных, называемую записью информации для отладки (DIE), для представления каждой переменной, типа, процедуры и т.п. DIE имеет тег (например, , , ) и атрибуты (пары ключ-значение). DIE может содержать вложенные (дочерние) DIE, образуя древовидную структуру. Атрибут DIE может ссылаться на другую DIE в любом месте дерева — например, DIE, представляющий переменную, будет иметь запись, указывающую на DIE, описывающий тип этой переменной. Для экономии места две большие таблицы, необходимые символическим отладчикам, представлены в виде инструкций с байт-кодом для простых конечных автоматов специального назначения. Таблица номеров строк, которая сопоставляет адреса кода с адресами в исходном коде и наоборот, также определяет, какие инструкции относятся к прологам и эпилогам функций. Таблица информации о кадрах вызовов позволяет отладчикам находить кадры в стеке вызовов. DWARF разделен на различные секции, такие как информация для отладки, кадр отладки и т.д.

Инструменты

Libdwarf — это библиотека, предоставляющая доступ к отладочной информации DWARF в исполняемых и объектных файлах.