6个版本

0.3.0 2019年10月13日
0.2.0 2019年1月28日
0.1.3 2018年8月22日
0.1.1 2018年7月10日
0.1.0 2017年11月22日

#50 in #stack-trace

Download history 5157/week @ 2024-02-26 5648/week @ 2024-03-04 5826/week @ 2024-03-11 6234/week @ 2024-03-18 4972/week @ 2024-03-25 5206/week @ 2024-04-01 5099/week @ 2024-04-08 5401/week @ 2024-04-15 6350/week @ 2024-04-22 5545/week @ 2024-04-29 5983/week @ 2024-05-06 6303/week @ 2024-05-13 6624/week @ 2024-05-20 7407/week @ 2024-05-27 6625/week @ 2024-06-03 7648/week @ 2024-06-10

28,740 每月下载量

MIT/Apache

34KB
778 代码行

检索进程所有线程的堆栈跟踪。

这是使用 rstack crate 实现的,它本身使用 ptrace 来回溯进程的线程。由于进程不能 ptrace 自身,我们被迫使用启动子进程来完成这项工作。通过 Cargo 特性支持多个回溯实现

默认情况下,使用 libunwind 后端。您可以通过 Cargo 切换到 libdw

[dependencies]
rstack-self = { version = "0.1", features = ["dw"], default-features = false }

示例

extern crate rstack_self;

use std::env;
use std::process::Command;
use std::thread;

fn main() {
    if env::args_os().count() > 1 {
        let _ = rstack_self::child();
        return;
    }

    // spawn a second thread just for fun
    thread::spawn(background_thread);

    let exe = env::current_exe().unwrap();
    let trace = rstack_self::trace(Command::new(exe).arg("child")).unwrap();

    println!("{:#?}", trace);
}

fn background_thread() {
    loop {
        thread::park();
    }
}

依赖项

~3–5MB
~103K SLoC