Карлик
DWARF — широко используемый стандартизированный формат данных отладки . Изначально DWARF был разработан вместе с форматом исполняемых и связываемых файлов (ELF), хотя он не зависит от форматов объектных файлов . [1] Это название представляет собой средневековое фэнтезийное было предложено название «Отладка с произвольными форматами записей» дополнение к «ELF», не имевшее официального значения, хотя с тех пор в качестве бэкронима . [1]
DWARF возник на основе компилятора C и отладчика sdb в Unix System V Release 4 (SVR4). [1]
История
[ редактировать ]Первая версия DWARF использовала чрезмерный объем памяти, и несовместимый преемник DWARF-2 заменил ее и добавил различные схемы кодирования для уменьшения размера данных. DWARF не сразу получил всеобщее признание; например, когда Sun Microsystems внедрила ELF в рамках своего перехода на Solaris , они решили продолжить использование stabs во вложении, известном как «stabs-in-elf». Linux последовал этому примеру, и DWARF-2 не стал использоваться по умолчанию до конца 1990-х годов.
Рабочая группа DWARF группы свободных стандартов выпустила версию DWARF 3 в январе 2006 года. [2] добавление (среди прочего) поддержки пространств имен C++ , Fortran 90 распределяемые данные и дополнительные методы оптимизации компилятора .
В 2010 году комитет DWARF опубликовал 4-ю версию DWARF, которая предлагает «улучшенное сжатие данных, лучшее описание оптимизированного кода и поддержку новых функций языка C++». [3]
Версия 5 формата DWARF была опубликована в феврале 2017 года. [4] [5] Он «включает в себя улучшения во многих областях: лучшее сжатие данных, отделение отладочных данных от исполняемых файлов, улучшенное описание макросов и исходных файлов, более быстрый поиск символов, улучшенную отладку оптимизированного кода, а также многочисленные улучшения функциональности и производительности».
Структура
[ редактировать ]DWARF использует структуру данных, называемую записью отладочной информации (DIE), для представления каждой переменной, типа, процедуры и т. д. DIE имеет тег (например, DW_TAG_переменная , DW_TAG_pointer_type , DW_TAG_subprogram ) и атрибуты (пары ключ-значение). DIE может иметь вложенные (дочерние) DIE, образующие древовидную структуру. Атрибут DIE может ссылаться на другой DIE в любом месте дерева — например, атрибут DIE, представляющий переменную, будет иметь Запись DW_AT_type , указывающая на DIE, описывающий тип переменной.
Для экономии места две большие таблицы, необходимые символическим отладчикам, представлены в виде байтовых специального назначения инструкций для простых конечных автоматов . Таблица номеров строк, которая сопоставляет местоположения кода с местоположениями исходного кода и наоборот, также определяет, какие инструкции являются частью прологов и эпилогов функций. Таблица информации о кадре вызова позволяет отладчикам находить кадры в стеке вызовов .
DWARF разделен на разные разделы, такие как .debug_info , [6] .debug_frame и т. д.
Инструменты
[ редактировать ]Libdwarf — это библиотека, предоставляющая доступ к отладочной информации DWARF в исполняемых файлах и объектных файлах. [7]
Дальнейшее чтение
[ редактировать ]Майкл Игер, председатель комитета по стандартам DWARF, написал введение в форматы отладки и DWARF 3, Введение в формат отладки DWARF . [1]
Ссылки
[ редактировать ]- ^ Jump up to: а б с д Майкл Дж. Игер (апрель 2012 г.). «Введение в формат отладки DWARF» (PDF) . Проверено 8 января 2015 г.
- ^ «Выпущена стандартная версия DWARF 3» (пресс-релиз). Группа свободных стандартов. 4 января 2006 г. Архивировано из оригинала 25 июля 2011 г. Проверено 25 июня 2007 г.
- ^ «Выпущена версия DWARF 4» . Комитет DWARF. 16 июня 2010 г. Архивировано из оригинала 30 июля 2020 г. Проверено 24 июня 2010 г.
- ^ «Выпущена стандартная версия DWARF 5» . Комитет DWARF. 15 февраля 2017 года . Проверено 7 августа 2017 г.
- ^ «Гном 5 Стандарт» . Комитет DWARF. 15 февраля 2017 года . Проверено 7 августа 2017 г.
- ^ .debug_info документация IBM
- ^ «libdwarf: интерфейс потребительской библиотеки для DWARF» . www.prevanders.net . Проверено 6 декабря 2023 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Libdwarf — библиотека C, предназначенная для упрощения чтения (и записи) приложений с использованием DWARF2, DWARF3.
- elfutils — еще одна библиотека C для обработки файлов ELF/DWARF.
- Как работают отладчики : Часть 3. Информация об отладке
- Отладка форматов DWARF и STAB