pub(crate) struct DebugInfo {
elf_data: Option<DebugInfoSource>,
context: Mutex<Option<Option<Context<EndianArcSlice<RunTimeEndian>>>>>,
}Fields§
§elf_data: Option<DebugInfoSource>The ELF image, kept around (or reopened) so the DWARF sections can be
loaded on first use. None for non-ELF artifacts.
context: Mutex<Option<Option<Context<EndianArcSlice<RunTimeEndian>>>>>None until first accessed; Some(None) once loading was attempted
and failed (or there was no ELF image to load from).
addr2line::Context caches parsed DWARF units behind plain
OnceCells internally, so it is Send but not Sync — a Mutex
serializes lookups from concurrent backtraces/traps instead of
exposing a &Context that could be read from multiple threads at
once.
Implementations§
Source§impl DebugInfo
impl DebugInfo
pub(crate) fn new(elf_data: Option<DebugInfoSource>) -> Self
Sourcepub(crate) fn with_context<T>(
&self,
f: impl FnOnce(Option<&Context<EndianArcSlice<RunTimeEndian>>>) -> T,
) -> T
pub(crate) fn with_context<T>( &self, f: impl FnOnce(Option<&Context<EndianArcSlice<RunTimeEndian>>>) -> T, ) -> T
Runs f with the DWARF context, building it from the ELF image on
first access. f receives None if there is no ELF image, or the
image has no (or malformed) DWARF debug info.
Auto Trait Implementations§
impl !Freeze for DebugInfo
impl RefUnwindSafe for DebugInfo
impl Send for DebugInfo
impl Sync for DebugInfo
impl Unpin for DebugInfo
impl UnwindSafe for DebugInfo
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Pointee for T
impl<T> Pointee for T
Source§impl<T> Upcastable for T
impl<T> Upcastable for T
Source§fn upcast_any_ref(&self) -> &(dyn Any + 'static)
fn upcast_any_ref(&self) -> &(dyn Any + 'static)
upcast ref
Source§fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn upcast_any_mut(&mut self) -> &mut (dyn Any + 'static)
upcast mut ref