3 个稳定版本
1.1.1 | 2020年4月3日 |
---|---|
1.1.0 | 2019年12月19日 |
1.0.9 | 2019年9月16日 |
#1790 in 硬件支持
775KB
14K SLoC
注意
请访问我们的 主页 了解用法。谢谢!
lib.rs
:
用于在运行时获取堆栈跟踪的库
此库旨在补充标准库对 RUST_BACKTRACE=1
的支持,允许程序在运行时获取堆栈跟踪。此库生成的堆栈跟踪不需要解析,例如,并暴露了多个后端实现的函数。
实现
此库使用多种策略来实际获取堆栈跟踪。例如,Unix 默认使用 libgcc 的 libunwind 绑定来获取堆栈跟踪,但 MacOS 使用 coresymbolication 或 dladdr 来获取符号名称,而 Linux 使用 gcc 的 libbacktrace。
当使用此库的默认功能集时,将选择当前平台“最合理”的默认设置,但也可以更精细地控制激活的功能。
API 原则
此库试图尽可能灵活,以适应获取堆栈跟踪的不同后端实现。因此,目前导出的函数是基于闭包的,而不是可能预期的基于迭代器的版本。这是由于底层 API 使用的限制。
用法
首先,将此添加到您的 Cargo.toml 中
[dependencies]
sgx_backtrace = "1.0.8"
然后
extern crate sgx_backtrace;
fn main() {
sgx_backtrace::set_enclave_path("enclave.signed.so");
sgx_backtrace::trace(|frame| {
let ip = frame.ip();
let symbol_address = frame.symbol_address();
// Resolve this instruction pointer to a symbol name
sgx_backtrace::resolve_frame(frame, |symbol| {
if let Some(name) = symbol.name() {
// ...
}
if let Some(filename) = symbol.filename() {
// ...
}
});
true // keep going to the next frame
});
}
依赖关系
~2MB
~42K SLoC