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
- Parse Portable PDB files with
PortablePdb::parse
. - Convert Portable PDB files to
PortablePdbCaches
withPortablePdbCacheConverter::process_portable_pdb
. - Serialize
PortablePdbCaches
withPortablePdbCacheConverter::serialize
and parse them withPortablePdbCache::parse
. - Look up line information for a function on a
PortablePdbCache
withPortablePdbCache::lookup
.
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. TheMethodDebugInformation
table is of particular interest tosymbolic
, 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
- An error encountered during
PortablePdbCache
creation or parsing. - Represents a source file that is referenced by this PDB.
- Lazy Embedded Source file reader.
- An error encountered while parsing a
PortablePdb
file. - Line information for a given IL offset in a function.
- A parsed Portable PDB file.
- The serialized PortablePdbCache binary format.
- The PortablePdbCache Converter.
Enums
- The kind of a
CacheError
. - The kind of a
FormatError
.