pub struct ContextPdbData<'p, 's, S: Source<'s> + Send + 's> { /* private fields */ }Expand description
Allows to easily create a Context directly from a pdb::PDB.
let pdb = pdb::PDB::open(stream)?;
let context_data = pdb_addr2line::ContextPdbData::try_from_pdb(pdb)?;
let context = context_data.make_context()?;Implementation note:
It would be nice if a Context could be created from a PDB directly, without
going through an intermediate ContextPdbData object. However, there doesn’t
seem to be an easy way to do this, due to certain lifetime dependencies: The
Context object wants to store certain objects inside itself (mostly for caching)
which have a lifetime dependency on pdb::ModuleInfo, so the ModuleInfo has to be
owned outside of the Context. So the ContextPdbData object acts as that external
ModuleInfo owner.
Implementations§
Source§impl<'p, 's, S: Source<'s> + Send + 's> ContextPdbData<'p, 's, S>
impl<'p, 's, S: Source<'s> + Send + 's> ContextPdbData<'p, 's, S>
Sourcepub fn try_from_pdb(pdb: PDB<'s, S>) -> Result<Self, Error>
pub fn try_from_pdb(pdb: PDB<'s, S>) -> Result<Self, Error>
Create a ContextPdbData from a PDB. This parses many of the PDB
streams and stores them in the ContextPdbData.
This creator function takes ownership of the pdb object and never gives it back.
Sourcepub fn try_from_pdb_ref(pdb: &'p mut PDB<'s, S>) -> Result<Self, Error>
pub fn try_from_pdb_ref(pdb: &'p mut PDB<'s, S>) -> Result<Self, Error>
Create a ContextPdbData from a PDB. This parses many of the PDB
streams and stores them in the ContextPdbData.
This creator function takes an exclusive reference to the pdb object, for consumers
that want to keep using the pdb object once the ContextPdbData object is dropped.
Sourcepub fn make_type_formatter(&self) -> Result<TypeFormatter<'_, 's>, Error>
pub fn make_type_formatter(&self) -> Result<TypeFormatter<'_, 's>, Error>
Create a TypeFormatter. This uses the default TypeFormatter settings.
Sourcepub fn make_type_formatter_with_flags(
&self,
flags: TypeFormatterFlags,
) -> Result<TypeFormatter<'_, 's>, Error>
pub fn make_type_formatter_with_flags( &self, flags: TypeFormatterFlags, ) -> Result<TypeFormatter<'_, 's>, Error>
Create a TypeFormatter, using the specified TypeFormatter flags.
Sourcepub fn make_context(&self) -> Result<Context<'_, 's>, Error>
pub fn make_context(&self) -> Result<Context<'_, 's>, Error>
Create a Context. This uses the default TypeFormatter settings.
Sourcepub fn make_context_with_formatter_flags(
&self,
flags: TypeFormatterFlags,
) -> Result<Context<'_, 's>, Error>
pub fn make_context_with_formatter_flags( &self, flags: TypeFormatterFlags, ) -> Result<Context<'_, 's>, Error>
Create a Context, using the specified TypeFormatterFlags.