| #[test] |
| fn all_frames_have_symbols() { |
| println!("{:?}", backtrace::Backtrace::new()); |
| |
| let mut missing_symbols = 0; |
| let mut has_symbols = 0; |
| backtrace::trace(|frame| { |
| let mut any = false; |
| backtrace::resolve_frame(frame, |sym| { |
| if sym.name().is_some() { |
| any = true; |
| } |
| }); |
| if any { |
| has_symbols += 1; |
| } else if !frame.ip().is_null() { |
| missing_symbols += 1; |
| } |
| true |
| }); |
| |
| // FIXME(#346) currently on MinGW we can't symbolize kernel32.dll and other |
| // system libraries, which means we miss the last few symbols. |
| if cfg!(windows) && cfg!(target_env = "gnu") { |
| assert!(missing_symbols < has_symbols && has_symbols > 4); |
| } else { |
| assert_eq!(missing_symbols, 0); |
| } |
| } |
| |
| #[test] |
| fn all_frames_have_module_base_address() { |
| let mut missing_base_addresses = 0; |
| backtrace::trace(|frame| { |
| if frame.module_base_address().is_none() { |
| missing_base_addresses += 1; |
| } |
| true |
| }); |
| |
| if cfg!(windows) { |
| assert_eq!(missing_base_addresses, 0); |
| } |
| } |