@@ -106,7 +106,6 @@ use backtrace_rs as backtrace;
106
106
/// previous point in time. In some instances the `Backtrace` type may
107
107
/// internally be empty due to configuration. For more information see
108
108
/// `Backtrace::capture`.
109
- #[ derive( Debug ) ]
110
109
pub struct Backtrace {
111
110
inner : Inner ,
112
111
}
@@ -146,7 +145,6 @@ fn _assert_send_sync() {
146
145
_assert :: < Backtrace > ( ) ;
147
146
}
148
147
149
- #[ derive( Debug ) ]
150
148
struct BacktraceFrame {
151
149
frame : backtrace:: Frame ,
152
150
symbols : Vec < BacktraceSymbol > ,
@@ -163,13 +161,45 @@ enum BytesOrWide {
163
161
Wide ( Vec < u16 > ) ,
164
162
}
165
163
164
+ impl fmt:: Debug for Backtrace {
165
+ fn fmt ( & self , fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
166
+ let mut capture = match & self . inner {
167
+ Inner :: Unsupported => return fmt. write_str ( "unsupported backtrace" ) ,
168
+ Inner :: Disabled => return fmt. write_str ( "disabled backtrace" ) ,
169
+ Inner :: Captured ( c) => c. lock ( ) . unwrap ( ) ,
170
+ } ;
171
+ capture. resolve ( ) ;
172
+
173
+ let mut dbg = fmt. debug_list ( ) ;
174
+
175
+ for frame in & capture. frames {
176
+ dbg. entries ( & frame. symbols ) ;
177
+ }
178
+
179
+ dbg. finish ( )
180
+ }
181
+ }
182
+
183
+ impl fmt:: Debug for BacktraceFrame {
184
+ fn fmt ( & self , fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
185
+ fmt. debug_list ( ) . entries ( & self . symbols ) . finish ( )
186
+ }
187
+ }
188
+
166
189
impl fmt:: Debug for BacktraceSymbol {
167
190
fn fmt ( & self , fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
168
- fmt. debug_struct ( "BacktraceSymbol" )
169
- . field ( "name" , & self . name . as_ref ( ) . map ( |b| backtrace:: SymbolName :: new ( b) ) )
170
- . field ( "filename" , & self . filename )
171
- . field ( "lineno" , & self . lineno )
172
- . finish ( )
191
+ let mut dbg = fmt. debug_struct ( "" ) ;
192
+ dbg. field ( "fn" , & self . name . as_ref ( ) . map ( |b| backtrace:: SymbolName :: new ( b) ) ) ;
193
+
194
+ if let Some ( fname) = self . filename . as_ref ( ) {
195
+ dbg. field ( "file" , fname) ;
196
+ }
197
+
198
+ if let Some ( line) = self . lineno . as_ref ( ) {
199
+ dbg. field ( "line" , & self . lineno ) ;
200
+ }
201
+
202
+ dbg. finish ( )
173
203
}
174
204
}
175
205
0 commit comments