8个版本

使用旧的Rust 2015

0.1.7 2018年10月11日
0.1.6 2018年10月5日
0.1.5 2018年9月3日
0.1.4 2018年4月1日
0.1.0 2015年6月20日

#1100Rust模式

Download history 29/week @ 2024-03-10 15/week @ 2024-03-17 4/week @ 2024-03-24 25/week @ 2024-03-31 2/week @ 2024-04-07 2/week @ 2024-04-14 7/week @ 2024-04-21 1/week @ 2024-04-28 1/week @ 2024-05-05 8/week @ 2024-05-19 53/week @ 2024-05-26 23/week @ 2024-06-02 39/week @ 2024-06-09 21/week @ 2024-06-16 48/week @ 2024-06-23

每月133次下载

MIT 许可证

24KB
383

Throw!

Travis CI status

高效、静态计算的回溯封装任何错误类型。

文档: https://docs.rs/throw

Throw不会替代现有的错误处理系统:它只是提供了一个包装你的错误并提供额外上下文的throw::Error<E>类型。

Throw导出两个结构体,throw::ErrorPointthrow::Errorthrow::Error 存储一个从它创建的 original_error 变量,然后是一个以 throw!() 开头的 ErrorPoint 列表,每次你用 up!() 向上传递错误时都会添加。

throw!()up!() 提供的功能严格少于类似 backtrace 的其他crate,但它们具有性能优势。使用编译器提供的宏,这些函数将它们使用的行号和文件名嵌入它们构建的 ErrorPoint 中,并在每个点逐步构建堆栈跟踪。此外,你也不会在处理错误的地方上方得到无关的堆栈跟踪行!这取决于你的使用情况,可能是好也可能是坏。

Throw也只有在实际使用宏的情况下才会工作——这是一个相当大的缺点。如果你没有严格的性能要求,backtrace 可能是你想要的。

Throw的实际应用:而不是这个

IO Error: failed to lookup address information: Name or service not known

你将得到这个

Error: IO Error: failed to lookup address information: Name or service not known
    at 79:17 in zaldinar::startup (src/startup.rs)
    at 104:4 in zaldinar::startup (src/startup.rs)
    at 28:17 in zaldinar_irclib (/home/daboross/Projects/Rust/zaldinar/zaldinar-irclib/src/lib.rs)

no_std

throw 支持不使用 std 进行构建,但它仍然会依赖于 alloc 并使用 alloc::Vec。这可以在使用 nightly rust 并设置 default-features = false 时启用。

throw = { version = "0.1", default-features = false }

依赖项

~175KB