2013-04-23 48 views
0

我試圖控制代碼引發的異常,但是這個樣本是不工作,因爲它應該在C++ Builder中5VCL例外5

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    try 
    { 
     throw Exception("NoNumber"); 
    } 
    catch(Exception& E) 
    { 
     // but we never get the LALAL message 
     ShowMessage("LALAL"); 
    } 
} 

爲什麼catch塊從來沒有達到的時候引發異常?

​​

可以讓編譯器發出輕微更加高效的代碼來處理異常:

回答

0

首先,你應該const參考,而不是捕捉異常。然而,單憑這一點不會阻止異常被抓住。

如果您在調試器內部運行應用程序,請記住調試器將首先捕獲該異常,因此您必須通過按F9或者通知調試器將異常傳回您的應用程序以進行正常處理運行工具欄按鈕,或者配置調試器忽略異常。

如果您在調試器外部運行應用程序,那麼您顯示的代碼沒有任何問題,可以防止catch在正常情況下捕獲異常。

我用了BCB5多年,這種類型的代碼一直適用於我(雖然我總是使用const)。