Формат отладочных данных DWARF: Структура и применение
DWARF
DWARF: стандартный формат отладочных данных для ELF и других. Поддержка C++, Fortran, оптимизаций компилятора. Версия 4 – сжатие и новые языковые возможности.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Стандартизированный формат данных отладки
Standardized debugging data format
DWARF — широко используемый стандартизированный формат данных отладки. DWARF был первоначально разработан вместе с исполняемым и компонуемым форматом (ELF), хотя он не зависит от форматов объектных файлов. Название является средневековым фантазийным дополнением к "ELF", которое изначально не имело официального значения, хотя впоследствии было предложено расшифровать его как "Debugging With Arbitrary Record Formats" (Отладка с произвольными форматами записей). DWARF включал (среди прочего) поддержку пространств имен C++, данных Fortran 90 и дополнительных методов оптимизации компилятора. В 2010 году комитет DWARF опубликовал версию 4, предлагающую "улучшенное сжатие данных, более точное описание оптимизированного кода и поддержку новых языковых возможностей C++". Версия 5 формата DWARF была опубликована в феврале 2017 года. Она "включает улучшения во многих областях: более эффективное сжатие данных, разделение данных отладки и исполняемых файлов, улучшенное описание макросов и исходных файлов, ускоренный поиск символов, улучшенная отладка оптимизированного кода, а также многочисленные улучшения функциональности и производительности".
DWARF is a widely used, standardized debugging data format. DWARF was originally designed along with Executable and Linkable Format (ELF), although it is independent of object file formats. The name is a medieval fantasy complement to "ELF" that had no official meaning, although the name "Debugging With Arbitrary Record Formats" has since been proposed as a backronym. adding (among other things) support for C++ namespaces, Fortran 90 data and additional compiler optimization techniques. The DWARF committee published version 4 of DWARF, which offers "improved data compression, better description of optimized code, and support for new language features in C++", in 2010. Version 5 of the DWARF format was published in February 2017. It "incorporates improvements in many areas: better data compression, separation of debugging data from executable files, improved description of macros and source files, faster searching for symbols, improved debugging of optimized code, as well as numerous improvements in functionality and performance."
Структура
DWARF использует структуру данных, называемую записью информации для отладки (DIE), для представления каждой переменной, типа, процедуры и т.п. DIE имеет тег (например, , , ) и атрибуты (пары ключ-значение). DIE может содержать вложенные (дочерние) DIE, образуя древовидную структуру. Атрибут DIE может ссылаться на другую DIE в любом месте дерева — например, DIE, представляющий переменную, будет иметь запись, указывающую на DIE, описывающий тип этой переменной. Для экономии места две большие таблицы, необходимые символическим отладчикам, представлены в виде инструкций с байт-кодом для простых конечных автоматов специального назначения. Таблица номеров строк, которая сопоставляет адреса кода с адресами в исходном коде и наоборот, также определяет, какие инструкции относятся к прологам и эпилогам функций. Таблица информации о кадрах вызовов позволяет отладчикам находить кадры в стеке вызовов. DWARF разделен на различные секции, такие как информация для отладки, кадр отладки и т.д.
DWARF uses a data structure called a Debugging Information Entry (DIE) to represent each variable, type, procedure, etc. A DIE has a tag (e. g., , , ) and attributes (key value pairs). A DIE can have nested (child) DIEs, forming a tree structure. A DIE attribute can refer to another DIE anywhere in the tree—for instance, a DIE representing a variable would have a entry pointing to the DIE describing the variable's type. To save space, two large tables needed by symbolic debuggers are represented as byte coded instructions for simple, special purpose finite state machines. The Line Number Table, which maps code locations to source code locations and vice versa, also specifies which instructions are part of function prologues and epilogues. The Call Frame Information table allows debuggers to locate frames on the call stack. DWARF has been divided into different sections like debug info, debug frame, etc.
Инструменты
Libdwarf — это библиотека, предоставляющая доступ к отладочной информации DWARF в исполняемых и объектных файлах.
Libdwarf is a library that provides access to the DWARF debugging information in executable files and object files.