【问题标题】:How to make my FreePascal app exit with a specific code if a certain exception is thrown?如果抛出某个异常,如何让我的 FreePascal 应用程序以特定代码退出?
【发布时间】:2015-12-24 05:36:41
【问题描述】:

我的程序有一个 ESyntaxError 类,我像这样使用它:

raise ESyntaxError.Create(Message)

我的 ESyntaxError 类是这样定义的:

ESyntaxError = class(Exception)

我观察到,如果调用了 ESyntaxError.Create(Message) 代码,我的程序的退出代码将设置为 1。但在这种情况下,我希望将其设置为 65

我试过这样做:

ExitCode := 65;
raise ESyntaxError.Create(Message);

...但是我的应用程序仍然只是以1 退出,而不是65——我猜是因为内置的Exception 类总是将ExitCode 重置为1? (不确定情况是否如此,并且在the Exception docs 中没有看到任何明确说明的内容,但我从我在此处观察到的行为推断出这一点)。

或者,如果我想最终让程序具有非1/non-0 退出状态,我是否应该以其他方式处理这个问题,而不是基于Exception

【问题讨论】:

  • 对于控制台应用程序它工作正常。对于 GUI 应用程序,最简单的方法是使用TApplicationProperties 组件(附加页面)及其OnException 事件来捕获未处理的异常。在里面写if E is ESyntaxError then Halt(65) else raise E;之类的东西。

标签: exception pascal freepascal exit-code


【解决方案1】:

这可行:您可以将主例程包装在 try-except 块中,然后为特定类型的异常分配 ExitCode

program project1;

uses
  SysUtils;

type
  EMy = class(Exception);

procedure run;
begin
  raise EMy.Create('lel');
end;

begin
  try
    run;
  except
    on e: EMy do
    begin
      ExitCode := 65;
    end;
  end;
end.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多