我正在尝试控制代码中引发的异常,但是此示例在C ++ Builder 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 :(得分:0)
首先,您应该通过const
引用来捕获异常:
catch(const Exception& E)
这允许编译器发出稍微更有效的代码来管理异常。但是,仅凭这一点并不能防止异常被捕获。
如果您正在调试器内部运行应用程序,请记住调试器将首先捕获异常,因此您必须告诉调试器将异常传递回您的应用程序,以便通过按F9或Run来正常处理工具栏按钮,或者配置调试器以忽略异常。
如果您在调试器之外运行应用程序,那么您所显示的代码没有任何问题会阻止catch
在正常情况下捕获异常。
我使用BCB5多年了,这种类型的代码对我来说一直很好(虽然我总是使用const
)。