6 个版本
使用旧的 Rust 2015
0.2.1 | 2016年6月8日 |
---|---|
0.2.0 | 2016年5月3日 |
0.1.3 | 2016年1月14日 |
#79 在 #backtrace
每月25 次下载
11KB
85 行
stacktrace-rs
关于 backtrace 的美化打印器。
该项目已弃用。请考虑查看 error-chain,它是对类似概念更成熟的实现。
lib.rs
:
一个用于使用堆栈跟踪的库 Result
。
Alex Crichton 的优秀 backtrace crate 执行了在各种平台上获取调用栈信息所需的工作。 Stacktrace 尝试使这些信息更易于使用。
快速入门
在您的 Cargo.toml
[dependencies]
stacktrace = "0.2"
在您的项目中
#[macro_use] extern crate stacktrace;
trace!{}
示例用法
有关更多信息,请参阅这些 示例。
#[macro_use] extern crate stacktrace;
pub struct Error1(usize);
pub struct Error2(String);
impl From<Error1> for Error2 {
fn from(err: Error1) -> Error2 {
Error2(format!("{}", err.0))
}
}
trace!{Error1 => Error2}
fn makes_a_traced_error() -> Result<(), Trace<Error1>> {
try!(Err(Error1(1337))); // Uses generic instance of "From<Err>" for "Trace<Err>"
Ok(())
}
fn propagates_a_traced_error() -> Result<(), Trace<Error2>> {
try!(makes_a_traced_error()); // Uses the macro-generated instance of "From<Trace<Error1>>" for "Trace<Error2>"
Ok(())
}
请参阅使用信息部分。
使用信息
此包旨在与二进制包一起使用。它提供了一个宏来定义和使用一个 Trace
结构体,该结构体将错误与关联的堆栈跟踪包装起来。该宏还定义了用于标准 try!
宏的 From
实例。
这些特质的实现是为什么需要在用户的包中用宏定义 Trace
结构体的原因,因为两件事阻止了它们在外部定义
- 由于标准库中的泛型
impl<A> From<A> for A
,我们无法实现一个泛型impl<A, B: From<A>> From<Trace<A>> for Trace<B>
,因为rustc
首先将其视为impl From<Trace<_>> for Trace<_>
。 - 如果
Trace
定义在这个包中,那么由于特质的协调规则,用户将无法实现From<A> for Trace<B>
。
调用 trace!{StructName; A => B, C => D, ...}
将生成一个具有以下实现的 struct StructName<E>
解引用<E>
可变解引用<E>
From<A> for StructName<B>
,这需要From<A> for B
From<C> for StructName<D>
等。From<StructName<A>> for StructName<B>
,这也需要From<A> for B
From<StructName<C>> for StructName<D>
等。Debug
,它将以与为Backtrace
定义的相同格式打印内部错误然后堆栈跟踪。
如果未指定,StructName
默认为 Trace
。
构建配置文件
对于发布构建,如果您想保留有用的堆栈跟踪信息,请考虑启用调试符号。要做到这一点,请将以下内容添加到您的 Cargo.toml
[profile.release]
debug = true
有关更多信息,请参阅 此处。
依赖项
~375KB