use blazesym::helper::ElfResolver;
use blazesym::normalize::Normalizer;
use blazesym::symbolize::source::Elf;
use blazesym::symbolize::source::Source;
use blazesym::symbolize::Input;
use blazesym::symbolize::Symbolizer;
use blazesym::symbolize::TranslateFileOffset as _;
use blazesym::Addr;
use blazesym::Pid;
fn main() {
let normalizer = Normalizer::new();
let normalized = normalizer
.normalize_user_addrs(Pid::Slf, [main as *const () as Addr].as_slice())
.unwrap();
assert_eq!(normalized.outputs.len(), 1);
let (file_offset, meta_idx) = normalized.outputs[0];
let meta = &normalized.meta[meta_idx];
let elf = meta.as_elf().unwrap();
let resolver = ElfResolver::open(&elf.path).unwrap();
let virt_offset = resolver
.file_offset_to_virt_offset(file_offset)
.unwrap()
.unwrap();
let symbolizer = Symbolizer::new();
let src = Source::Elf(Elf::new(&elf.path));
let sym = symbolizer
.symbolize_single(&src, Input::VirtOffset(virt_offset))
.unwrap()
.into_sym()
.unwrap();
assert_eq!(sym.name, "normalize_virt_offset::main");
}