Rust带有panic!不可恢复的错误

本文概述

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

Rust带有panic!不可恢复的错误
  • 展开:展开是从其遇到的每个函数的堆栈存储器中清除数据的过程。但是, 展开过程需要大量工作。展开的替代方法是中止。
  • 中止:中止是在不清除堆栈存储器中数据的情况下结束程序的过程。操作系统将删除数据。如果我们从平缓切换到中止, 那么我们需要添加以下语句:
panic = 'abort';

让我们看一个简单的panic!例子!巨集:

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

输出

Rust带有panic!不可恢复的错误

在上面的输出中, 第一行显示了错误消息, 该消息传达了两个信息, 即紧急消息和错误位置。紧急消息是”不存在这样的文件”, 并且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]);
}

输出

Rust带有panic!不可恢复的错误

在上面的示例中, 我们尝试访问索引5处的第六个元素。在这种情况下, Rust在访问无效索引时会感到panic!。因此, Rust将不会返回任何东西。

但是, 对于其他语言(例如C和C ++), 即使向量不属于该内存, 它们也会返回一些内容。这就是所谓的缓冲区溢出, 它导致安全问题。

Rust回溯

Rust Backtrace是已被调用以了解”发生错误的所有原因”的所有功能的列表。我们需要设置RUST_BACKTRACE环境变量来获取回溯。


微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?