📜  Rust无法恢复的错误

📅  最后修改于: 2021-01-08 13:51:20             🧑  作者: Mango

惊慌失措,无法恢复错误!

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

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

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

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

输出:

在上面的输出中,第一行显示了错误消息,该错误消息传达了两个信息,即紧急消息和错误位置。紧急消息是“不存在此类文件”,并且error.rs:3:5表示它是我们文件error.rs:3:5的第三行和第五个字符。

注意:通常,我们不会实施恐慌!在我们的程序中。我们的程序代码引起了恐慌!在标准库中定义。包含文件名和行号的错误消息可在其他人的代码中找到!宏被调用。

恐慌的优势!巨集

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

让我们看一个简单的例子:

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

输出:

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

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

锈回溯

Rust Backtrace是已被调用以了解“发生了什么导致错误的所有函数”的列表。我们需要设置RUST_BACKTRACE环境变量来获取backtrace。