delphi - 正确的灾难性错误处理

标签 delphi error-handling delphi-2006 delphi-3

有一些我一直遇到的问题,我确实没有用 Delphi 程序解决,并且想知道是否有人可以指导我。正如主题所说,如何进行正确的灾难性错误处理?例如:

// is file necessary for the program present?
if not FileExists(FilePath1) then
   begin
     raise Exception.Create(FilePath1 + ' does not exist and is required for this program to function.');
   // I obviously need to do something here to make the program QUIT and not have
   // any more code run.

     Application.Terminate;
     Abort;
   end;

我也可以在那里使用异常单元并抛出异常,但程序会像以前一样继续运行。我过去使用过暂停调用,但它似乎没有进行任何清理或类似操作,所以我最终制作了一个大程序,对我所做的一切进行关闭和免费调用,只是为了确定(即使这样我我不确定任何幕后的事情)。

那么处理此类事情的正确方法是什么?

编辑:为了澄清,我想知道如何让程序执行它需要执行的清理操作,然后立即退出而不执行任何其他代码。

最佳答案

要执行异常终止,请调用 Halt() 并传递退出代码。

if CatastropicErrorDetected then
begin
  ... show error message
  Halt(1);
end;

在 Windows 上,这会导致调用 TerminateProcess并会立即停止执行。

您注意到没有执行任何清理操作,这通常就是您想要的。由于您在应用程序启动时执行此检查,因此应该没有任何需要清理的内容。

关于delphi - 正确的灾难性错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422070/

相关文章:

c - 如何在 Delphi 项目中包含/链接 C .lib 文件

delphi - 为什么 PC 之间的控件缩放比例不同?

sql-server - 为什么只有部分用户收到错误 : "Connection is busy with results for another command"

powershell - 在 Invoke-Command Cmdlet 中处理 ScriptBlock 中的错误

github - 将 FormSpree 集成到 GitHub Jekyll 中(返回消息 : Form should post)

delphi - 调用 ShowModal 并设置 PopupParent 是一个好主意吗?在较新的 Delphi 版本中是否有必要?

delphi - 将 AlphaBlendValue 属性添加到 Delphi 的 TImage 的最简单方法是什么

delphi - 在Delphi中使用TRDSConnection组件

android - Android-Logcat错误

delphi - 使用 Delphi 事后压缩 PDF