#[cfg(all(
feature = "symbolize",
any(target_os = "linux", target_os = "windows", target_os = "macos")
))]
#[tokio::main]
async fn main() {
use hopframe::aslr::read_aslr_offset;
use hopframe::symbolize::{LookupAddress, SymbolMapBuilder};
use hopframe::unwinder::UnwindBuilder;
let symbol_map = SymbolMapBuilder::new().build().await;
let mut unwinder = UnwindBuilder::new().build();
let mut iter = unwinder.unwind();
let aslr_offset = read_aslr_offset().unwrap();
while let Some(frame) = iter.next() {
let symbol = symbol_map
.lookup(LookupAddress::Relative(
(frame.address_for_lookup() - aslr_offset) as u32,
))
.await;
println!(
"frame: {:?} symbol: {:?}",
&frame,
&symbol.map(|s| s.symbol.name)
);
}
}
#[cfg(not(all(
feature = "symbolize",
any(target_os = "linux", target_os = "windows", target_os = "macos")
)))]
fn main() {
compile_error!("Symbolization is not enabled, or the target OS is not supported.");
}