2016-07-07 19 views
0

如果我將主應用程序對象放在try-catch塊中,它是否會捕獲任何無法預料的崩潰?如果應用程序由於任何原因而崩潰,控制是否會來到這裏?將try-catch塊中的主應用程序對象捕獲所有崩潰?

下面是一個使用Qt應用程序的例子,但假設這個應用程序非常大,加載其他dll等,但這仍然是應用程序的主體。那麼守衛這個區塊,是否有效地保護該應用程序中的所有內容?

#include <QApplication> 
    #include <QTextEdit> 

    int main(int argv, char **args) 
    { 
     int exit_code = 0; 

     try 
     { 
      QApplication app(argv, args); 

      QTextEdit textEdit; 
      textEdit.show(); 

      exit_code = app.exec(); 
     } 
     catch(...) 
     { 
      // will this catch all crashes? 
     } 

     return exit_code; 
    } 

技術上的例外處理程序顯然趕上該塊內拋出的異常,但我想知道如何做到這一點規模的catch塊包圍整個應用程序。

另外我知道它可能不會做任何有用的事情,因爲我們不知道拋出/捕獲了什麼異常,但我想知道是否可以使用它來捕捉神祕而隨機的崩潰?它會捕獲例如訪問衝突0xc0000005 excpetion嗎?

+10

異常處理無法捕捉*任何*崩潰。它只處理異常。 –

+2

'它會捕獲例如訪問衝突0xc0000005 excpetion?' – deviantfan

+1

您必須捕獲來自操作系統的信號並處理它。如果你的程序被操作系統以這種方式打敗了,那麼程序就會被破壞,很可能已經無法修復。試圖繼續是蠻幹的。 – user4581301

回答

1

絕對可以讓你崩潰。

try-catch塊只會捕獲通過throw關鍵字拋出的異常。
如果你訪問內存之外,或者除以零,你的程序可能會崩潰,也可能不會崩潰。

此外,try-catches不能停止abort()終止程序。

您的access violation可能是一個分段錯誤。您需要防止問題發生。

+1

它也不會捕獲從非本地靜態變量的構造函數和析構函數拋出的異常。 – Brian

相關問題