主应用程序单元结束后可以捕获异常吗?

时间:2020-03-06 14:42:07  来源:igfitidea点击:

在我们的一个应用程序中,即时消息正在获取我似乎找不到或者捕获的异常。

...
  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)

解决方案

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

当我遇到类似问题时,它对我有所帮助。

我们可以尝试以下两种操作:

1)快速简便的方法是在最后一个"结束"处击中" F7"。这将带我们进入其他敲定块。

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

SysUtils单元实际上在其初始化部分中设置了默认的ErrorProc和ExceptProc过程,并在其finalization部分中将其撤消,因此在这种情况下,经常需要确保SysUtils是dpr中uses子句中的第一个单元,因此这将是最后定稿的。可能足以使我们获得有关出问题的有意义的数据。

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

另一个解决方案是在每个单元完成部分中放置一个Try / Except块,然后在其中处理异常。

你的目标是什么?我们要抑制该异常还是对其进行调试?可以按照Zartog的建议通过F7逐步调试它们来完成调试。如果我们发现哪个单元在完成过程中有异常,则可以尝试以不同的顺序将其放在调用它的uses子句中。

祝你好运!