如何判断我是否在Delphi异常堆栈中?

问题描述 投票:8回答:3

从finally块中,是否有可能告诉异常已被提出?

delphi exception exception-handling
3个回答
18
投票

您可以检查是否已分配ExceptObject或ExceptAddr。在VCL来源中,这是为了考试。在GIFImg.pas或jpeg.pas中。

应输出以下代码

ExceptObject <> nil ExceptObject = nil

如果你当然删除了例外

ExceptObject = nil ExceptObject = nil

  try
    try
      raise Exception.Create('Just an exception');
    finally
      if ExceptObject <> nil then
        WriteLn('ExceptObject <> nil')
      else
        WriteLn('ExceptObject = nil');
    end;
  except

  end;
  if ExceptObject <> nil then
    WriteLn('ExceptObject <> nil')
  else
    WriteLn('ExceptObject = nil');

3
投票

这有点像黑客,但你可以尝试调用AcquireExceptionObject。如果你处于异常状态,你将获得一个返回值,否则你将获得零。

(如果你确实得到了一个,请确保之后调用ReleaseExceptionObject。)


2
投票

AFAIK这只能通过嵌套的try语句来实现:

Try
  Try
    ...
  Except
    ...
  End;
Finally
  ...
End
© www.soinside.com 2019 - 2024. All rights reserved.