C ++中的全局异常处理

时间:2010-12-06 13:15:05

标签: c++ exception-handling global

我可以在C ++中实现全局异常处理吗? 我的要求是try ...在一段代码中没有使用catch块,那么应该有一个全局异常处理程序来处理所有未捕获的异常。

我可以实现吗,请提出宝贵的建议:)

4 个答案:

答案 0 :(得分:5)

我总是将最外面的函数包装在try-catch中,如下所示:

int main()
{
   try {
      // start your program/function
      Program program; program.Run();
   }
   catch (std::exception& ex) {
      std::cerr << ex.what() << std::endl;
   }
   catch (...) {
      std::cerr << "Caught unknown exception." << std::endl;
   }
}

这将抓住一切。 C ++中的良好异常处理不是关于编写try-catch,而是要抓住你知道如何处理它的地方(就像你似乎想要做的那样)。在这种情况下,唯一要做的就是将错误消息写入stderr,以便用户可以对其进行操作。

答案 1 :(得分:4)

在C ++中,当未捕获异常时调用terminate函数。您可以使用set_terminate函数安装自己的终止处理程序。缺点是你的终止处理程序可能永远不会返回;它必须使用某些操作系统原语终止您的程序。默认只是调用abort()

答案 2 :(得分:3)

您可以使用set_terminatecurrent_exception()

的组合

答案 3 :(得分:0)

当引发异常时,如果未在该点捕获,则它会上升到层次结构,直到它实际被捕获为止。如果没有代码来处理异常,则程序终止 您可以在终止之前运行特定代码,以使用您自己的set_unexpectedset_terminate

处理程序进行清理