×
Rust教程Rust简介Rust的特点Rust开发环境安装Rust第一个程序

控制语句

Rust if语句Rust if in a let语句Rust loop循环Rust for循环Rust while循环

Rust所有权

Rust所有权Rust引用和借用Rust切片

Rust结构体

Rust结构体Rust结构体更新语法Rust结构体方法语法

Rust枚举

Rust枚举匹配运算符Rust if let控制流程

Rust模块

Rust模块Rust文件系统Rust公开函数Rust use关键字引用模块

Rust集合

Rust向量Rust字符串

Rust错误处理

Rust错误处理Rust不可恢复的错误Rust可恢复的错误

Rust泛型与性状

Rust泛型Rust TraitRust生命周期

Rust智能指针

Rust智能指针Rust Box<T>Rust Deref traitRust Drop trait

Rust不可恢复的错误


不可恢复的错误是检测到的错误,程序员无法处理它。 当发生这种错误时,panic!宏会被执行。panic!打印失败消息。 panic!清理堆栈然后退出。

展开(Unwinding):展开是一个清理它遇到的每个函数的堆栈内存中的数据的过程。 但是,展开过程需要大量工作。Unwinding的替代方案是Aborting
中止(Aborting):中止是在不清除堆栈内存中的数据的情况下结束程序的过程。操作系统将删除数据。如果从展开切换到中止,那么需要添加以下语句:

panic = 'abort';

下面来看一个panic!宏的简单示例:

fn main()  
{
   panic!(?No such file exist?);
}

执行上面示例代码,得到如下结果 -

在上面的输出中,第一行显示错误消息,它传达两个信息,即panic消息和错误的位置。 panic消息是“没有这样的文件存在” 和 error.rs:3:5 表示文件的第三行和第五个字符。

注意:一般来说,不实现panic!在程序代码中,包含文件名和行号的错误消息可以在其他人的代码中调用panic!宏。

panic!的好处

Rust语言没有缓冲区重读问题。缓冲区重写是一种情况,当从缓冲区读取数据并且程序超出缓冲区时,即它读取相邻的存储器。 这导致违反内存安全。

下面来看一个简单的例子:

fn main()  
{  
   let v = vec![20,30,40];  
   print!("element of a vector is :",v[5]);  
}

执行上面示例代码,得到以下结果 -

在上面的例子中,试图访问索引5所在的第六个元素。在这种情况下,Rust会因为访问无效索引而引发panic。 因此,Rust不会返回任何内容。
但是,对于其他语言(如C和C++),它们会返回一些内容,尽管该向量不属于该内存。 这称为缓冲区重写,它会导致安全问题。

Rust回溯
Rust回溯是调用的所有函数的列表,用于了解“导致错误的原因”。 需要设置RUST_BACKTRACE环境变量来获取回溯。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)