2015-07-06 38 views
0

其中一個MFC函數引發了std :: exception或CException無法捕獲的異常。因此,爲了找出問題,我將捕捉所有異常作爲最後的方式(只知道出了什麼問題,而不是生產)。如何知道捕獲的是什麼,同時捕獲所有C++異常

try 
{ 
    CPropertySheet::OnInitDialog(); 
} 
catch (...) 
{ 
    //need to know what did catch. 
} 

但是有沒有辦法知道在捕獲C++中的所有異常之後捕獲了什麼?至少出現異常或任何其他線索的錯誤消息。

+2

你不能使用調試器嗎?第一次機會exception_選項或類似的東西設置_stop。 – rodrigo

+0

這隻發生在生產環境中。並且只在發佈版本中 –

回答

0

簡答題:沒有。

catch(...)捕獲一切都沒有問題的類型拋出。你甚至可以拋出一個int它會被捕獲。這也意味着你不能得到錯誤信息,因爲可能沒有錯誤信息,例如在int的情況下。

要解決您的問題,您只能捕獲有問題的代碼可能拋出的任何異常類型,根據其文檔,但沒有捕獲所有處理程序。如果您仍然收到未捕獲的異常,則運行時可能會引發一些異常。你必須引用你的編譯器的文檔來知道可能是哪一個。例如,在某些運行時,訪問衝突(例如空ponter訪問)可能被視爲可被捕獲的異常。

另一種選擇是使用調試器並將其配置爲在拋出異常時中斷。它可以向您顯示確切的位置和拋出的異常類型。正如你所說,它只發生在發佈版本中,你可能會嘗試使用帶有調試信息的發佈版本。