我可以實現在C++全局異常處理? 我的要求是try ... catch塊是不是在一段代碼使用,那麼應該有一個全球性的異常處理程序將處理所有未捕獲的異常。全球異常處理
我能做到的話,請給您的寶貴建議:)
我可以實現在C++全局異常處理? 我的要求是try ... catch塊是不是在一段代碼使用,那麼應該有一個全球性的異常處理程序將處理所有未捕獲的異常。全球異常處理
我能做到的話,請給您的寶貴建議:)
可以使用的set_terminate
和current_exception()
在C++相結合的terminate
函數被調用時,一個例外是未捕獲的。您可以使用set_terminate
函數安裝您自己的終止處理程序。缺點是你的終止處理程序可能永遠不會返回;它必須用一些操作系統原語來終止你的程序。默認是隻爲了呼喚abort()
當一個異常升高時,如果在該點沒有被捕獲,其上升的層次結構,直到它實際上是抓住了。如果沒有代碼來處理異常,則程序終止。
可以運行特定的代碼,終止使用自己的set_unexpected
或set_terminate
處理程序做清理工作之前,我一直包在最外面的功能在一個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,以便用戶可以對其執行操作。
有C中沒有的try ... catch塊呢。你在想C++嗎? – 2010-12-06 13:16:49
謝謝Karl,我已將它改爲C++。 – 2010-12-06 13:20:09
此MSDN論壇線程可能會提供一些有用的鏈接:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/99cbe120-d8a9-448f-b827-8b61ca0a6a27 – 2010-12-06 13:31:53