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

时间:2009-09-12 21:35:14

标签: delphi exception exception-handling

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

3 个答案:

答案 0 :(得分:18)

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

以下代码应输出

ExceptObject<>零
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');

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

Try
  Try
    ...
  Except
    ...
  End;
Finally
  ...
End