29_不可恢复错误与panic

1. 概述

Rust的可靠性:错误处理,在大部分情况下,编译时提示错误,并处理。

Rust错误的分类如下:

  • 可恢复:例如文件未找到,可在此尝试
  • 不可恢复:bug的另外所说法,通常是逻辑错误,比如访问的索引超出范围

2. Rust的错误处理

Rust没有类似异常的机制,针对可恢复的错误,使用 Result<T, E>,针对不可恢复的错误,Rust提供了panic!宏,当执行panic!宏时,程序会执行以下逻辑

  • 打印一个错误信息
  • 展开(unwind)、清理调用栈(Stack)
  • 退出程序

为了应对panic,展开或终止(abort)调用栈,两种过程有以下区别

程序展开调用栈(工作量大):Rust沿着调用栈往回走,清理每个遇到的函数中的数据;立即终止调用栈:不进行清理,直接停止程序,内存需要OS进行清理。如果想让二进制文件更小,可以把设置从"展开"改为"终止"。修改步骤如下:

  • 在cargo.toml中适当的profile部分设置panic='abort',如下示例代码
Rust 复制代码
[package]
name = "s27_string_cut"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[profile.release]
panic = 'abort'

3. 使用panic!产生的回溯信息

panic!可能出现在我们写的代码中,也可能出现在我们依赖的代码中。通过调用panic!的函数回溯信息来定位引起问题的代码。具体的做法是设置环境变量RUST_BACKTRACE=full可得到回溯信息。为了获取带有调试信息的回溯,必须启用调试符号(不带 --release)。

相关推荐
前端snow4 小时前
ai agent --- 文件存储
前端
Frag0ut4 小时前
Chrome四大版本获取及共存指南:Stable/Beta/Dev/Canary
前端·chrome·浏览器·dev·beta·canary·共存版
IT_陈寒5 小时前
SpringBoot自动配置坑了我一把,原来是这样绕过去的
前端·人工智能·后端
广州华水科技5 小时前
单北斗GNSS变形监测在大坝安全监测中的应用与优势
前端
zeng不错5 小时前
B站 173 个投稿活动看到眼瞎?我写了个扩展,主打一个精准打击
前端
Latchh5 小时前
前端导出的JPEG红字发糊,质量要拉到100才清楚
前端·图像处理·人工智能·计算机视觉
默_笙6 小时前
🚦 请三个 AI 考官给 RAG 打分:量化评估实战(下)
前端·javascript
Joy T6 小时前
聊天系统中五大ID的演进与实战解析
java·前端·人工智能·spring·agent入门
@大迁世界7 小时前
JEV RAG:更高效的 RAG 系统解决方案?
开发语言·rust
Seraphina368 小时前
DVWA(SQL注入-low,medium,XSS反射-low)
前端·数据库·笔记·sql·网络安全·web·xss