Crate symbolic_ppdb

Crate symbolic_ppdb 

Source
Expand description

Provides support for reading Portable PDB files, specifically line information resolution for functions.

Portable PDB is a debugging information file format for Common Language Infrastructure (CLI) languages. It is an extension of the ECMA-335 format.

§Functionality

§Example

use symbolic_testutils::fixture;
use symbolic_ppdb::{LineInfo, PortablePdb, PortablePdbCacheConverter, PortablePdbCache};

let buf = std::fs::read(fixture("windows/portable.pdb")).unwrap();
let pdb = PortablePdb::parse(&buf).unwrap();

let mut converter = PortablePdbCacheConverter::new();
converter.process_portable_pdb(&pdb).unwrap();
let mut buf = Vec::new();
converter.serialize(&mut buf).unwrap();

let cache = PortablePdbCache::parse(&buf).unwrap();
let line_info = cache.lookup(7, 10).unwrap();
assert_eq!(line_info.line, 81);

§Structure of a Portable PDB file

An ECMA-335 file is divided into sections called streams. The possible streams are:

  • #~ (“metadata”), comprising information about classes, methods, modules, &c., organized into tables adhering to various schemas. The original ECMA-335 tables are described in Section II.22 of the ECMA-335 spec, the tables added by Portable PDB are described in the Portable PDB spec. The MethodDebugInformation table is of particular interest to symbolic, as it contains line information for functions.
  • #Strings, comprising null-terminated UTF-8 strings.
  • #GUID, a list of GUIDs.
  • #US (“user strings”), comprising UTF-16 encoded strings.
  • #Blob, comprising blobs of data that don’t fit in any of the other streams.

The Portable PDB format extends ECMA-335 by the addition of another steam, #PDB, as well as several tables to the #~ stream.

Structs§

CacheError
An error encountered during PortablePdbCache creation or parsing.
Document
Represents a source file that is referenced by this PDB.
EmbeddedSource
Lazy Embedded Source file reader.
FormatError
An error encountered while parsing a PortablePdb file.
LineInfo
Line information for a given IL offset in a function.
PortablePdb
A parsed Portable PDB file.
PortablePdbCache
The serialized PortablePdbCache binary format.
PortablePdbCacheConverter
The PortablePdbCache Converter.

Enums§

CacheErrorKind
The kind of a CacheError.
FormatErrorKind
The kind of a FormatError.