是否有一种有效的方法来防止程序没有尝试...除了?

Wit*_*292 1 delphi exception

我有一个Delphi 6客户端 - 服务器应用程序,其中服务器本质上是:

initialize;
repeat
  try
    getInput;
    putOutput;
  except
    on e: exception do writeln(e.message);
  end
until false;
Run Code Online (Sandbox Code Playgroud)

在开发过程中,错误(例如指针异常)很少见,但服务器可以继续运行.现在,它的生产服务器似乎调试和人们很容易去除try...except,因为它增加了大量的执行对服务器的开销,但随后如有异常要发生,将停止服务器.

一个解决办法是有一个父进程只需重新启动整个服务器,并在重新启动绕过初始化将有效地重现了什么try...except成就,但也不会有什么导致异常的任何记录,并且有或没有初始化重启实际上创造了很多不需要的"状态"问题,特别是与客户端连接.

有没有办法覆盖或修改异常处理,以便在异常发生时将其记录到某个地方(例如在系统事件日志或%errorlevel%中),然后程序退出并重新启动或(更好:)恢复,但没有开销无所不包的try...except?

理想的解决方案将记录异常,但恢复执行的级别repeat...until.也许通过执行诸如保存repeat某些可访问全局的地址之类的内容,然后进行任何异常来解除调用堆栈并在该保存的地址恢复?(我猜这try..except本质上是什么,但是有没有办法避免在没有例外情况下它所施加的开销?)

Dav*_*nan 6

扩展Serg的建议:

repeat
  try
    repeat
      getInput;
      putOutput;
    until false;
  except
    on e: exception do writeln(e.message);
  end
until false;
Run Code Online (Sandbox Code Playgroud)

具有相同的行为但移动try .. except到最里面的循环外部.

但是,如果这对性能产生任何明显的影响,我会感到惊讶.