主应用程序单元结束后能否捕获异常?

时间:2008-09-25 02:47:49

标签: delphi exception

在我们的一个应用程序中,我得到一个我似乎无法找到或陷阱的异常。

...
  Application.CreateForm(TFrmMain, FrmMain);
  outputdebugstring(pansichar('Application Run')); //this is printed
  Application.Run;
  outputdebugstring(pansichar('Application Run After')); //this is printed
end.
<--- The Exception seems to be here    

事件日志显示

> ODS: Application Run 
> //Various Application Messages 
> ODS: Application Run After
> First Change Exception at $xxxxxxxx.  ...etc

我能想到的是它是其中一个单位的终结代码。

(德尔福7)

4 个答案:

答案 0 :(得分:4)

尝试安装MadExcept - 它应该捕获异常并为您提供堆栈跟踪。

当我遇到类似的问题时,它帮助了我。

答案 1 :(得分:4)

您可以尝试以下两件事:

1)快速轻松地在最后'结束'击中'F7'。这将引导您进入其他终结块。

2)尝试覆盖Application.OnException事件。

答案 2 :(得分:4)

SysUtils单元实际上在其初始化部分设置了默认的ErrorProc和ExceptProc过程,并在其终结部分中撤消它们,所以在这种情况下,通常需要确保SysUtils是dpr中uses子句中的第一个单元。 ,那么它将是最后一个完成的。可能足以为您提供有关出错的有意义的数据。

答案 3 :(得分:2)

终结例外很棘手。即使您首先将 SysUtls 放在项目文件中,您的应用程序对象可能已经消失,这意味着您的全局异常处理程序也已消失。 MadExcept 可能适用于此。

另一种解决方案是在每个单元最终化部分中放置尝试 / 块,然后在那里处理例外。

你的目标是什么?您想要抑制异常还是调试它?如Zartog建议的那样,可以通过使用 F7 逐步调试它来完成调试。如果您在 finalization 中发现哪个单元具有异常,那么您可以尝试在调用它的uses子句中以不同的顺序放置它。

祝你好运!