本文概述
- 使用panic!宏的好处
- Rust回溯
文章图片
- 展开:展开是从其遇到的每个函数的堆栈存储器中清除数据的过程。但是, 展开过程需要大量工作。展开的替代方法是中止。
- 中止:中止是在不清除堆栈存储器中数据的情况下结束程序的过程。操作系统将删除数据。如果我们从平缓切换到中止, 那么我们需要添加以下语句:
panic = 'abort';
让我们看一个简单的panic!例子!巨集:
fn main()
{
panic!(?No such file exist?);
}
输出
文章图片
在上面的输出中, 第一行显示了错误消息, 该消息传达了两个信息, 即紧急消息和错误位置。紧急消息是” 不存在这样的文件” , 并且error.rs:3:5表示它是我们文件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将不会返回任何东西。
【Rust带有panic!不可恢复的错误】但是, 对于其他语言(例如C和C ++), 即使向量不属于该内存, 它们也会返回一些内容。这就是所谓的缓冲区溢出, 它导致安全问题。
Rust回溯 Rust Backtrace是已被调用以了解” 发生错误的所有原因” 的所有功能的列表。我们需要设置RUST_BACKTRACE环境变量来获取回溯。
推荐阅读
- Rust可恢复错误处理实例分析
- Rust什么是向量(向量的用法)
- Rust字符串的介绍和用法
- Rust所有权和内存分析图解
- Rust模块介绍和用法解释
- Rust 模块文件系统解析和用法
- Rust如何引用不同模块中的名称()
- Rust函数如何设置为公有()
- Rust编程语言教程介绍