2013-04-23 24 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)。