1919extern crate backtrace;
2020
2121use backtrace:: Backtrace ;
22- use std:: io:: { self , Write } ;
2322use std:: panic:: { self , PanicInfo } ;
2423use std:: thread;
2524
@@ -35,6 +34,12 @@ This is a bug. Please report it at:
3534" ;
3635
3736fn panic_hook ( info : & PanicInfo ) {
37+ let message = panic_message ( info) ;
38+ eprintln ! ( "{}" , message) ;
39+ exit_on_debug_mode ( ) ;
40+ }
41+
42+ fn panic_message ( info : & PanicInfo ) -> String {
3843 let location = info. location ( ) ;
3944 let file = location. as_ref ( ) . map ( |l| l. file ( ) ) . unwrap_or ( "<unknown>" ) ;
4045 let line = location. as_ref ( ) . map ( |l| l. line ( ) ) . unwrap_or ( 0 ) ;
@@ -52,18 +57,17 @@ fn panic_hook(info: &PanicInfo) {
5257
5358 let backtrace = Backtrace :: new ( ) ;
5459
55- let mut stderr = io:: stderr ( ) ;
56-
57- let _ = writeln ! ( stderr) ;
58- let _ = writeln ! ( stderr, "====================" ) ;
59- let _ = writeln ! ( stderr) ;
60- let _ = writeln ! ( stderr, "{:?}" , backtrace) ;
61- let _ = writeln ! ( stderr) ;
62- let _ = writeln ! ( stderr, "Thread '{}' panicked at '{}', {}:{}" , name, msg, file, line) ;
63-
64- let _ = writeln ! ( stderr, "{}" , ABOUT_PANIC ) ;
65-
66- exit_on_debug_mode ( ) ;
60+ let lines = [
61+ "" . to_string ( ) ,
62+ "====================" . to_string ( ) ,
63+ "" . to_string ( ) ,
64+ format ! ( "{:?}" , backtrace) ,
65+ "" . to_string ( ) ,
66+ format ! ( "Thread '{}' panicked at '{}', {}:{}" , name, msg, file, line) ,
67+ ABOUT_PANIC . to_string ( ) ,
68+ ] ;
69+
70+ lines. join ( "\n " )
6771}
6872
6973#[ cfg( debug_assertions) ]
0 commit comments