代码之家  ›  专栏  ›  技术社区  ›  Zartog

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

  •  8
  • Zartog  · 技术社区  · 15 年前

    从finally块中,是否可以判断引发了异常?

    3 回复  |  直到 6 年前
        1
  •  18
  •   Uwe Schuster    15 年前

    您可以检查是否分配了exceptobject或exceptaddr。 在VCL源中,这是为检查而做的。在gifimg.pas或jpeg.pas中。

    应输出以下代码

    例外对象<gt;零
    异常对象=零

    如果你排除了例外,那么当然

    异常对象=零
    异常对象=零

      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');
    
        2
  •  3
  •   Mason Wheeler    15 年前

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

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

        3
  •  2
  •   sdu    15 年前

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

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