4

在我们的一个应用程序中,我遇到了一个我似乎无法找到或捕获的异常。

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

4 回答 4

5

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

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

于 2008-09-25T02:54:34.620 回答
4

您可以尝试以下两件事:

1) 快速简单的是在最后的“结束”上按“F7”。这将带您进入其他最终确定块。

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

于 2008-09-25T03:12:57.913 回答
4

SysUtils 单元实际上在其初始化部分设置了默认的 ErrorProc 和 exceptProc 过程,并在其终结部分中撤消它们,因此在这种情况下,通常需要确保 SysUtils 是 dpr 中使用子句中的第一个单元,所以然后这将是最后一个完成的。可能足以让您获得一些有关问题所在的有意义的数据。

于 2008-09-25T03:31:13.750 回答
2

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

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

你的目标是什么?你想抑制异常还是调试它?按照 Zartog 的建议,可以通过F7逐步调试它。如果您发现哪个单元在最终确定中有异常,那么您可以尝试在调用它的 uses 子句中以不同的顺序放置它。

祝你好运!

于 2008-09-25T05:41:38.383 回答