diff --git a/src/libstd/backtrace.rs b/src/libstd/backtrace.rs index 6b4ae77cec7..f6c34486d70 100644 --- a/src/libstd/backtrace.rs +++ b/src/libstd/backtrace.rs @@ -152,7 +152,6 @@ struct BacktraceFrame { symbols: Vec, } -#[derive(Debug)] struct BacktraceSymbol { name: Option>, filename: Option, @@ -164,6 +163,16 @@ enum BytesOrWide { Wide(Vec), } +impl fmt::Debug for BacktraceSymbol { + fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt.debug_struct("BacktraceSymbol") + .field("name", &self.name.as_ref().map(|b| backtrace::SymbolName::new(b))) + .field("filename", &self.filename) + .field("lineno", &self.lineno) + .finish() + } +} + impl fmt::Debug for BytesOrWide { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { output_filename( @@ -364,3 +373,19 @@ impl Capture { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn debug_backtrace_fmt() { + let bt = Backtrace::capture(); + eprintln!("uncaptured: {:?}", bt); + let bt = Backtrace::force_capture(); + eprintln!("captured: {:?}", bt); + eprintln!("display print: {}", bt); + eprintln!("resolved: {:?}", bt); + unimplemented!(); + } +}