ГНОМ

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

DWARF — это широко используемый стандартизированный формат отладочных данных . DWARF изначально был разработан вместе с Executable and Linkable Format (ELF), хотя он независим от форматов объектных файлов . [1] Название — средневековое фэнтезийное дополнение к «ELF», которое не имело официального значения, хотя с тех пор в качестве бэкронима было предложено название «Debugging With Arbitrary Record Formats» . [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 Группы свободных стандартов выпустила версию 3 DWARF в январе 2006 года [2] , добавив (помимо прочего) поддержку пространств имен C++ , выделяемых данных Fortran 90 и дополнительные методы оптимизации компилятора .

В 2010 году комитет DWARF опубликовал версию 4 DWARF, которая предлагает «улучшенное сжатие данных, лучшее описание оптимизированного кода и поддержку новых языковых возможностей в C++». [3]

Версия 5 формата DWARF была опубликована в феврале 2017 года. [4] [5] Она «включает улучшения во многих областях: лучшее сжатие данных, отделение отладочных данных от исполняемых файлов, улучшенное описание макросов и исходных файлов, более быстрый поиск символов, улучшенная отладка оптимизированного кода, а также многочисленные улучшения функциональности и производительности».

Структура

DWARF использует структуру данных, называемую записью отладочной информации (DIE), для представления каждой переменной, типа, процедуры и т. д. DIE имеет тег (например, DW_TAG_variable , 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]

Ссылки

  1. ^ abcd Майкл Дж. Игер (апрель 2012 г.). "Введение в формат отладки DWARF" (PDF) . Получено 08.01.2015 .
  2. ^ "DWARF Version 3 Standard Released" (пресс-релиз). Free Standards Group. 4 января 2006 г. Архивировано из оригинала 2011-07-25 . Получено 2007-06-25 .
  3. ^ "DWARF Version 4 Released". Комитет DWARF. 16 июня 2010 г. Архивировано из оригинала 2020-07-30 . Получено 2010-06-24 .
  4. ^ "DWARF Version 5 Standard Released". Комитет DWARF. 15 февраля 2017 г. Получено 2017-08-07 .
  5. ^ "DWARF 5 Standard". Комитет DWARF. 15 февраля 2017 г. Получено 2017-08-07 .
  6. ^ .debug_info документация ibm
  7. ^ "libdwarf: Интерфейс потребительской библиотеки к DWARF". www.prevanders.net . Получено 2023-12-06 .
  • Официальный сайт
  • Libdwarf — библиотека языка C, предназначенная для упрощения чтения (и записи) приложений с использованием DWARF2, DWARF3.
  • elfutils — еще одна библиотека C для обработки файлов ELF/DWARF.
  • Как работают отладчики: Часть 3 — Отладочная информация
  • Отладочные форматы DWARF и STAB
Взято с "https://en.wikipedia.org/w/index.php?title=DWARF&oldid=1264120474"