error-handling - 如何追溯错误结果的原因?

标签 error-handling rust

在编写使用 Result 类型的代码时,您可能希望用户和开发人员有不同的行为。

  • 在编写能够优雅地处理错误的应用程序时,最好使用 Result
  • 在开发过程中,您可能希望“捕获”错误以查看是哪一行代码造成了错误,或者在创建 Err 值时获取堆栈跟踪。

如果您犯了一个独特的错误,则不难搜索它,但如果错误来自标准库,则该错误可能非常普遍。

例如,如果不手动将每个 file.read()? 更改为 file,就不可能知道哪个 read 命令导致了意外的文件结束.read().unwrap().

是否有方便的方法从 Result 获取堆栈跟踪?

一个弱但可行的解决方案可能是制作一个用于读取的宏,read_in_release_unwrap_in_debug!(file, data)...但这感觉很尴尬。


我有一个文件阅读器,有许多 read 调用,但有一个失败。我不确定是哪个。在运行时,我想将结果推送回调用者。对于调试,我希望失败的读取调用停止或以某种方式让我知道它的行号。

最佳答案

如果您使用 anyhow你可以免费得到这个!问题是您需要每晚使用并启用环境变量:

RUST_BACKTRACE=1 cargo +nightly run

This is the tracking issue for stabilisation , 和 a PR to stabilise it .看起来对于它是否需要在稳定之前在 no_std 中工作或类似的事情存在一些分歧。

关于error-handling - 如何追溯错误结果的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42275777/

相关文章:

Rust 发现,配置文件未按预期工作

Scala:访问 optional 对象中的 optional 值

python - 如果 try 语句在 python 中成功,则运行代码

rust - 如果没有匹配项,在 Rust 中使用 "match"会发生什么?

rust - 如何判断某些东西是堆分配的还是堆栈分配的?

rust - 什么是 crate 属性,我应该在哪里添加它?

python - python 异常包含的 errnos 是否与 "linux/errno.h"中的 errnos 相同?

oracle - Oracle异常处理-这正确吗?

R 插入符包错误 - 至少一个类级别不是有效的 R 变量名称

rust - 无法移出递归结构的共享引用