在我们的一个应用程序中,我得到一个我似乎无法找到或陷阱的异常。
...
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)
答案 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子句中以不同的顺序放置它。
祝你好运!