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
PortablePdbCacheswithPortablePdbCacheConverter::process_portable_pdb. - Serialize
PortablePdbCacheswithPortablePdbCacheConverter::serializeand parse them withPortablePdbCache::parse. - Look up line information for a function on a
PortablePdbCachewithPortablePdbCache::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. TheMethodDebugInformationtable 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§
- Cache
Error - An error encountered during
PortablePdbCachecreation or parsing. - Document
- Represents a source file that is referenced by this PDB.
- Embedded
Source - Lazy Embedded Source file reader.
- Format
Error - An error encountered while parsing a
PortablePdbfile. - Line
Info - Line information for a given IL offset in a function.
- Portable
Pdb - A parsed Portable PDB file.
- Portable
PdbCache - The serialized PortablePdbCache binary format.
- Portable
PdbCache Converter - The PortablePdbCache Converter.
Enums§
- Cache
Error Kind - The kind of a
CacheError. - Format
Error Kind - The kind of a
FormatError.