Expand description
Read DWARF debugging information.
§Example Usage
Print out all of the functions in the debuggee program:
// Read the DWARF sections with whatever object loader you're using.
// These closures should return a `Reader` instance (e.g. `EndianSlice`).
let loader = |section: gimli::SectionId| { get_file_section_reader(section.name()) };
let sup_loader = |section: gimli::SectionId| { get_sup_file_section_reader(section.name()) };
let mut dwarf = gimli::Dwarf::load(loader)?;
dwarf.load_sup(sup_loader)?;
// Iterate over all compilation units.
let mut iter = dwarf.units();
while let Some(header) = iter.next()? {
// Parse the abbreviations and other information for this compilation unit.
let unit = dwarf.unit(header)?;
// Iterate over all of this compilation unit's entries.
let mut entries = unit.entries();
while let Some(entry) = entries.next_dfs()? {
// If we find an entry for a function, print it.
if entry.tag() == gimli::DW_TAG_subprogram {
println!("Found a function: {:?}", entry);
}
}
}Full example programs:
-
ddbug, a utility giving insight into code generation by making debugging information readable -
dwprod, a tiny utility to list the compilers used to create each compilation unit within a shared library or executable (viaDW_AT_producer) -
dwarf-validate, a program to validate the integrity of some DWARF and its references between sections and compilation units.
§API Structure
-
Basic familiarity with DWARF is assumed.
-
The
Dwarftype contains the commonly used DWARF sections. It has methods that simplify access to debugging data that spans multiple sections. Use of this type is optional, but recommended. -
The
DwarfPackagetype contains the DWARF package (DWP) sections. It has methods to find a DWARF object (DWO) within the package. -
Each section gets its own type. Consider these types the entry points to the library:
-
DebugAbbrev: The.debug_abbrevsection. -
DebugAddr: The.debug_addrsection. -
DebugAranges: The.debug_arangessection. -
DebugFrame: The.debug_framesection. -
DebugInfo: The.debug_infosection. -
DebugLine: The.debug_linesection. -
DebugLineStr: The.debug_line_strsection. -
DebugLoc: The.debug_locsection. -
DebugLocLists: The.debug_loclistssection. -
DebugNames: The.debug_namessection. -
DebugPubNames: The.debug_pubnamessection. -
DebugPubTypes: The.debug_pubtypessection. -
DebugRanges: The.debug_rangessection. -
DebugRngLists: The.debug_rnglistssection. -
DebugStr: The.debug_strsection. -
DebugStrOffsets: The.debug_str_offsetssection. -
DebugTypes: The.debug_typessection. -
DebugCuIndex: The.debug_cu_indexsection. -
DebugTuIndex: The.debug_tu_indexsection. -
EhFrame: The.eh_framesection. -
EhFrameHdr: The.eh_frame_hdrsection.
-
-
Each section type exposes methods for accessing the debugging data encoded in that section. For example, the
DebugInfostruct has theunitsmethod for iterating over the compilation units defined within it. -
Offsets into a section are strongly typed: an offset into
.debug_infois theDebugInfoOffsettype. It cannot be used to index into theDebugLinetype becauseDebugLinerepresents the.debug_linesection. There are similar types for offsets relative to a compilation unit rather than a section.
Structs§
- Abbreviation
- An abbreviation describes the shape of a
DebuggingInformationEntry’s type: its code, tag type, whether it has children, and its set of attributes. - Abbreviations
- A set of type abbreviations.
- Abbreviations
Cache - A cache of previously parsed
Abbreviations. - Addr
Entry Iter - An iterator over the addresses from a
.debug_addrsection. - Addr
Header - A header for a set of entries in the
.debug_addrsection. - Addr
Header Iter - An iterator over the headers of a
.debug_addrsection. - Arange
Entry - A single parsed arange.
- Arange
Entry Iter - An iterator over the aranges from a
.debug_arangessection. - Arange
Header - A header for a set of entries in the
.debug_arangesection. - Arange
Header Iter - An iterator over the headers of a
.debug_arangessection. - Attribute
- An attribute in a
DebuggingInformationEntry, consisting of a name and associated value. - Attribute
Specification - The description of an attribute in an abbreviated type. It is a pair of name and form.
- Augmentation
- We support the z-style augmentation defined by
.eh_frame. - Base
Addresses - Optional base addresses for the relative
DW_EH_PE_*encoded pointers. - Call
Frame Instruction Iter - A lazy iterator parsing call frame instructions.
- CfiEntries
Iter - An iterator over CIE and FDE entries in a
.debug_frameor.eh_framesection. - Common
Information Entry A Common Information Entry holds information that is shared among many Frame Description Entries. There is at least one CIE in every non-empty
.debug_framesection.- Complete
Line Program - A line number program that has previously been run to completion.
- Debug
Abbrev - The
DebugAbbrevstruct represents the abbreviations describingDebuggingInformationEntrys’ attribute names and forms found in the.debug_abbrevsection. - Debug
Addr - The raw contents of the
.debug_addrsection. - Debug
Aranges - The
DebugArangesstruct represents the DWARF address range information found in the.debug_arangessection. - Debug
CuIndex - The data in the
.debug_cu_indexsection of a.dwpfile. - Debug
Frame DebugFramecontains the.debug_framesection’s frame unwinding information required to unwind to and recover registers from older frames on the stack. For example, this is useful for a debugger that wants to print locals in a backtrace.- Debug
Info - The
DebugInfostruct represents the DWARF debugging information found in the.debug_infosection. - Debug
Info Unit Headers Iter - An iterator over the units of a .debug_info section.
- Debug
Line - The
DebugLinestruct contains the source location to instruction mapping found in the.debug_linesection. - Debug
Line Str - The
DebugLineStrstruct represents the DWARF strings found in the.debug_line_strsection. - Debug
Loc - The raw contents of the
.debug_locsection. - Debug
LocLists - The
DebugLocListsstruct represents the DWARF data found in the.debug_loclistssection. - Debug
Macinfo - The raw contents of the
.debug_macinfosection. - Debug
Macro - The raw contents of the
.debug_macrosection. - Debug
Names - The
DebugNamesstruct represents the DWARF 5 name index information found in the.debug_namessection. - Debug
PubNames - The
DebugPubNamesstruct represents the DWARF public names information found in the.debug_pubnamessection. - Debug
PubTypes - The
DebugPubTypesstruct represents the DWARF public types information found in the.debug_infosection. - Debug
Ranges - The raw contents of the
.debug_rangessection. - Debug
RngLists - The
DebugRngListsstruct represents the contents of the.debug_rnglistssection. - Debug
Str - The
DebugStrstruct represents the DWARF strings found in the.debug_strsection. - Debug
StrOffsets - The raw contents of the
.debug_str_offsetssection. - Debug
TuIndex - The data in the
.debug_tu_indexsection of a.dwpfile. - Debug
Types - The
DebugTypesstruct represents the DWARF type information found in the.debug_typessection. - Debug
Types Unit Headers Iter - An iterator over the type-units of this
.debug_typessection. - Debugging
Information Entry - A Debugging Information Entry (DIE).
- Dwarf
- All of the commonly used DWARF sections, and other common information.
- Dwarf
Package - The sections from a
.dwpfile, with parsed indices. - Dwarf
Package Sections - The sections from a
.dwpfile. - Dwarf
Sections - All of the commonly used DWARF sections.
- EhFrame
EhFramecontains the frame unwinding information needed during exception handling found in the.eh_framesection.- EhFrame
Hdr EhFrameHdrcontains the information about the.eh_frame_hdrsection.- EhHdr
Table - The CFI binary search table that is an optional part of the
.eh_frame_hdrsection. - EhHdr
Table Iter - An iterator for
.eh_frame_hdrsection’s binary search table. - Endian
Slice - A
&[u8]slice with endianity metadata. - Entries
Cursor - A cursor into the Debugging Information Entries tree for a compilation unit.
- Entries
Raw - A raw reader of the data that defines the Debugging Information Entries.
- Entries
Tree - The state information for a tree view of the Debugging Information Entries.
- Entries
Tree Iter - An iterator that allows traversal of the children of an
EntriesTreeNode. - Entries
Tree Node - A node in the Debugging Information Entry tree.
- Evaluation
- A DWARF expression evaluator.
- Expression
- The bytecode for a DWARF expression or location description.
- File
Entry - An entry in the
LineProgramHeader’sfile_namesset. - File
Entry Format - The format of a component of an include directory or file name entry.
- Frame
Description Entry - A
FrameDescriptionEntryis a set of CFA instructions for an address range. - Incomplete
Line Program - A line number program that has not been run to completion.
- Line
Instructions - An iterator yielding parsed instructions.
- Line
Program Header - A header for a line number program in the
.debug_linesection, as defined in section 6.2.4 of the standard. - LineRow
- A row in the line number program’s resulting matrix.
- Line
Rows - Executes a
LineProgramto iterate over the rows in the matrix of line number information. - Line
Sequence - A sequence within a line number program. A sequence, as defined in section 6.2.5 of the standard, is a linear subset of a line number program within which addresses are monotonically increasing.
- LocList
Iter - An iterator over a location list.
- Location
List Entry - A location list entry from the
.debug_locor.debug_loclistssections. - Location
Lists - The DWARF data found in
.debug_locand.debug_loclistssections. - Macro
Iter - Iterator over the entries in the
.debug_macrosection. - Name
Abbreviation - A name abbreviation entry defines how name entries are encoded.
- Name
Abbreviation Attribute - An attribute specification in a name abbreviation.
- Name
Abbreviations - A table of name entry abbreviations.
- Name
Attribute - A parsed attribute for a
NameEntry. - Name
Bucket Iter - An iterator over the hash entries for a bucket in a name index hash table.
- Name
Entry - A parsed entry from the
.debug_namessection. - Name
Entry Iter - An iterator for a series of name entries in a name index entry pool.
- Name
Entry Offset - An offset into the entry pool of a name index.
- Name
Hash Iter - An iterator over the indexes of the names in a name index hash table that match a hash value.
- Name
Index - A single name index from the
.debug_namessection. - Name
Index Header - The header of a name index in the
.debug_namessection. - Name
Index Header Iter - An iterator over the name index headers in the
.debug_namessection. - Name
Table Index - An index into the name table of a
NameIndex. - Name
Table Iter - An iterator over the indexes of all names in a name index.
- Operation
Iter - An iterator for the operations in an expression.
- Parsed
EhFrame Hdr ParsedEhFrameHdrcontains the parsed information from the.eh_frame_hdrsection.- Partial
Frame Description Entry - A partially parsed
FrameDescriptionEntry. - Piece
- The description of a single piece of the result of a DWARF expression.
- PubNames
Entry - A single parsed pubname.
- PubNames
Entry Iter - An iterator over the pubnames from a
.debug_pubnamessection. - PubTypes
Entry - A single parsed pubtype.
- PubTypes
Entry Iter - An iterator over the pubtypes from a
.debug_pubtypessection. - Range
- An address range from the
.debug_ranges,.debug_rnglists, or.debug_arangessections. - Range
Iter - An iterator for the address ranges of a
DebuggingInformationEntry. - Range
Lists - The DWARF data found in
.debug_rangesand.debug_rnglistssections. - RawLoc
List Iter - A raw iterator over a location list.
- RawRng
List Iter - A raw iterator over an address range list.
- Reader
Offset Id - An identifier for an offset within a section reader.
- Register
Rule Iter - An unordered iterator for register rules.
- Relocate
Reader - A
Readerwhich applies relocations to addresses and offsets. - RngList
Iter - An iterator over an address range list.
- Section
Base Addresses - Optional base addresses for the relative
DW_EH_PE_*encoded pointers in a particular section. - Store
OnHeap - Indicates that storage should be allocated on heap.
- Unit
- All of the commonly used information for a unit in the
.debug_infoor.debug_typessections. - Unit
Header - The common fields for the headers of compilation units and type units.
- Unit
Index - The partially parsed index from a
DebugCuIndexorDebugTuIndex. - Unit
Index Section - Information about a unit’s contribution to a section in a
.dwpfile. - Unit
Index Section Iterator - An iterator over the section offsets and sizes for a row in a
UnitIndex. - Unit
Offset - An offset into the current compilation or type unit.
- UnitRef
- A reference to a
Unitand its associatedDwarf. - Unwind
Context - Common context needed when evaluating the call frame unwinding information.
- Unwind
Expression - The location of a DWARF expression within an unwind section.
- Unwind
Table - The
UnwindTableiteratively evaluates aFrameDescriptionEntry’sCallFrameInstructionprogram, yielding the each row one at a time. - Unwind
Table Row - A row in the virtual unwind table that describes how to find the values of the registers in the previous frame for a range of PC addresses.
Enums§
- Abbreviations
Cache Strategy - The strategy to use for caching abbreviations.
- Attribute
Value - The value of an attribute in a
DebuggingInformationEntry. - Call
Frame Instruction - A parsed call frame instruction.
- CfaRule
- The canonical frame address (CFA) recovery rules.
- CieOr
Fde - Either a
CommonInformationEntry(CIE) or aFrameDescriptionEntry(FDE). - Column
Type - The type of column that a row is referring to.
- DieReference
- A reference to a DIE, either relative to the current CU or relative to the section.
- Error
- An error that occurred when parsing.
- Evaluation
Result - The state of an
Evaluationafter evaluating a DWARF expression. The evaluation is eitherComplete, or it requires more data to continue, as described by the variant. - Index
Section Id - Section kinds which are permitted in a
.dwpindex. - Line
Instruction - A parsed line number program instruction.
- Location
- A single location of a piece of the result of a DWARF expression.
- Macro
Entry - an Entry in the
.debug_macrosection. - Macro
String - A string in a macro entry.
- Name
Attribute Value - A parsed attribute value for a
NameEntry. - Name
Type Unit - A reference to a type unit.
- Operation
- A single decoded DWARF expression operation.
- Pointer
- A decoded pointer.
- RawLoc
List Entry - A raw entry in .debug_loclists.
- RawRng
List Entry - A raw entry in .debug_rnglists
- Register
Rule - An entry in the abstract CFI table that describes how to find the value of a register.
- Unit
Type - This enum specifies the type of the unit and any type specific data carried in the header (e.g. the type signature/type offset of a type unit).
- Value
- The value of an entry on the DWARF stack.
- Value
Type - The type of an entry on the DWARF stack.
Traits§
- Array
Like - Marker trait for types that can be used as backing storage when a growable array type is needed.
- Evaluation
Storage - Specification of what storage should be used for
Evaluation. - Line
Program - A
LineProgramprovides access to aLineProgramHeaderand a way to add files to the files table if necessary. Gimli consumers should never need to use or see this trait. - Reader
- A trait for reading the data from a DWARF section.
- Reader
Offset - A trait for offsets with a DWARF section.
- Relocate
- Trait for relocating addresses and offsets while reading a section.
- Section
- A convenience trait for loading DWARF sections from object files. To be used like:
- Unwind
Context Storage - Specification of what storage should be used for
UnwindContext. - Unwind
Offset - An offset into an
UnwindSection. - Unwind
Section - A section holding unwind information: either
.debug_frameor.eh_frame. SeeDebugFrameandEhFramerespectively.
Type Aliases§
- Result
- The result of a parse.