6 个版本 (3 个重大更新)

0.4.2 2023年12月22日
0.4.1 2022年2月26日
0.4.0 2020年11月4日
0.3.0 2019年10月13日
0.1.0 2017年11月7日

#703调试

Download history 5095/week @ 2024-03-14 4243/week @ 2024-03-21 3765/week @ 2024-03-28 4492/week @ 2024-04-04 3982/week @ 2024-04-11 4881/week @ 2024-04-18 4214/week @ 2024-04-25 4911/week @ 2024-05-02 4391/week @ 2024-05-09 4663/week @ 2024-05-16 5129/week @ 2024-05-23 5635/week @ 2024-05-30 5642/week @ 2024-06-06 5198/week @ 2024-06-13 4719/week @ 2024-06-20 3837/week @ 2024-06-27

每月 20,228 次下载
用于 4 crate(直接使用 2 个)

MIT/Apache

48KB
1K SLoC

rstack

文档

远程堆栈跟踪。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确说明,否则任何有意提交以包含在作品中的贡献,根据 Apache-2.0 许可协议定义,应按上述方式双许可,不附加任何额外条款或条件。


lib.rs:

libunwind 的接口。

libunwind 提供了对进程调用链的访问。它支持本地和远程进程。

示例

打印当前线程的回溯

use unwind::{Cursor, RegNum, get_context};

get_context!(context);
let mut cursor = Cursor::local(context).unwrap();

loop {
    let ip = cursor.register(RegNum::IP).unwrap();

    match (cursor.procedure_info(), cursor.procedure_name()) {
        (Ok(ref info), Ok(ref name)) if ip == info.start_ip() + name.offset() => {
            println!(
                "{:#016x} - {} ({:#016x}) + {:#x}",
                ip,
                name.name(),
                info.start_ip(),
                name.offset()
            );
        }
        _ => println!("{:#016x} - ????", ip),
    }

    if !cursor.step().unwrap() {
        break;
    }
}

依赖项

~0.3–0.8MB
~19K SLoC