1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
#[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);
}
}
|