2010-12-06 46 views
7

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

我能做到的话,请给您的宝贵建议:)

+3

有C中没有的try ... catch块呢。你在想C++吗? – 2010-12-06 13:16:49

+0

谢谢Karl,我已将它改为C++。 – 2010-12-06 13:20:09

+0

此MSDN论坛线程可能会提供一些有用的链接:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/99cbe120-d8a9-448f-b827-8b61ca0a6a27 – 2010-12-06 13:31:53

回答

1

可以使用的set_terminatecurrent_exception()

4

在C++相结合的terminate函数被调用时,一个例外是未捕获的。您可以使用set_terminate函数安装您自己的终止处理程序。缺点是你的终止处理程序可能永远不会返回;它必须用一些操作系统原语来终止你的程序。默认是只为了呼唤abort()

0

当一个异常升高时,如果在该点没有被捕获,其上升的层次结构,直到它实际上是抓住了。如果没有代码来处理异常,则程序终止。
可以运行特定的代码,终止使用自己的set_unexpectedset_terminate

3

处理程序做清理工作之前,我一直包在最外面的功能在一个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,以便用户可以对其执行操作。