| #[macro_use] extern crate lazy_static; |
| extern crate rustc_demangle; |
| use rustc_demangle::demangle; |
| fn demangle_line(line: &str) -> String { |
| static ref RE: Regex = Regex::new(r"[_a-zA-Z$][_a-zA-Z$0-9.]*").unwrap(); |
| RE.replace_all(line, |caps: &Captures| { |
| format!("{:#}", demangle(caps.get(0).unwrap().as_str())) |
| ::demangle_line("mo fo\tboom hello "), |
| ::demangle_line("_ZN7example4main17h0db00b8b32acffd5E:"), |
| fn handles_mid_demangling() { |
| ::demangle_line(" lea rax, [rip + _ZN55_$LT$$RF$$u27$a$u20$T$u20$as$u20$core..fmt..Display$GT$3fmt17h510ed05e72307174E]"), |
| " lea rax, [rip + <&\'a T as core::fmt::Display>::fmt]"); |
| ::demangle_line(" call _ZN3std2io5stdio6_print17he48522be5b0a80d9E@PLT"), |
| " call std::io::stdio::_print@PLT"); |
| for line in stdin.lock().lines() { |
| println!("{}", demangle_line(&line.unwrap())); |