Struct pdb_addr2line::ContextPdbData
source · pub struct ContextPdbData<'p, 's, S: Source<'s> + '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
sourceimpl<'p, 's, S: Source<'s> + 's> ContextPdbData<'p, 's, S>
impl<'p, 's, S: Source<'s> + '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
.