程序在异常后不会停止

Program doesn't stop after exception

本文关键字:异常 程序      更新时间:2023-10-16

我在 Ubuntu 12.04 中使用 eclipse。我在程序中使用了一些异常,当它们被捕获时,它会正确地给我 cout。但该计划一直持续到最后。有没有办法在异常后停止程序?

这是我正在使用的代码:

try{
        if(BLER==-1) throw 12;
    }catch(int exception){
        cout << "ERROR: BLER value is invalid for x= " << x << ", BLER_input= " << BLER_input << ", m= "<< m << endl;
    }

一些解决方案:

  1. 如果你在 main() 例程中执行此操作,请使用函数中的return(并根据返回值执行此操作)

  2. 使用 exit(n)其中 n 是退出代码 (http://www.cplusplus.com/reference/cstdlib/exit/)

  3. abort()这是否是一个关键问题(http://www.cplusplus.com/reference/cstdlib/abort/)

注意:正如 James Kanze 所指出的,exitabort 不会调用本地对象的析构函数。这是值得注意的,因为您正在处理类。

如果你可以/必须处理当前函数中的问题,你可以(并且应该)在那里终止:

#include <iostream>
#include <cstdlib>
if ( BLER == -1 )
{
    std::cout << "BLER value is invalid." << std::endl;
    std::exit( EXIT_FAILURE );
}
当您

遇到错误条件但不知道如何正确处理它时,将引发异常。在这种情况下,您抛出一个异常而不是整数,可以选择指示其构造函数中遇到的问题......

#include <stdexcept>
if ( BLER == -1 )
{
    throw std::runtime_exception( "BLER value is invalid" );
}

。并在调用树的某个地方捕获它,在那里你可以给出一个更好的错误消息,可以处理问题,重新抛出,或者根据你的选择终止)。默认情况下,只有在根本没有捕获程序的情况下,异常才会终止程序("未处理的异常");这就是构造的整个想法。

抛出一个整数并在同一函数中捕获它是 (ab-) 使用异常作为函数内goto

使用函数 exit: exit(1); ,其中 1 是退出代码(通常非零表示错误)。如果将异常视为严重错误,也可以使用 abort()

要在捕获异常后停止程序的执行,只需在catch块中调用std::exit()

#include <cstdlib>
#include <iostream>
int main()
try
{
  throw 42;
}
catch(int i)
{
  std::cout << "Caught int: " << i << ". Exiting...n";
  std::exit(EXIT_FAILURE);
}

现场演示在这里。

这也适用于main之外。您可以将EXIT_FAILURE替换为所需的任何int值,可在0-255范围内移植。

尝试像这样使用 return 命令

 return 0 //for successful termination or your preffered int status returned
 //or just
 return;
 //or (C++)
 [std::exit]

C++ 中的catch处理程序允许在代码的正常执行路径之外处理错误。处理后,C++假定恢复正常操作或程序是安全的。

如果不是这种情况,假设您只想记录错误,您可以自由地重新throw导致错误进一步向上传播的异常。

如果根本没有捕获异常,则将调用C++函数std::terminate。默认行为是调用abort

对你来说,最好的办法可能是通过在 catch 块的末尾调用 throw 来重新抛出 exeception。