2010-12-06 48 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,以便用戶可以對其執行操作。