delphi 输出异常信息

输出异常信息

代码

on <异常对象类型> do 获取异常信息

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    System.Error(reAccessViolation);
  except
    on e: Exception do
      ShowMessage(e.Message);
  end;
end;

ExceptObject 获取异常信息

procedure TForm1.Button2Click(Sender: TObject);
begin
  try
    System.Error(reAccessViolation);
  except
    ShowMessage(Exception(ExceptObject).Message);
  end;
end;

AcquireExceptionObject 获取异常信息

procedure TForm1.Button3Click(Sender: TObject);
var
  ExceptionPtr: Pointer;
begin
  ExceptionPtr := nil;
  try
    System.Error(reAccessViolation);
  except
    ExceptionPtr := AcquireExceptionObject;
  end;

  if ExceptionPtr = nil then
    ShowMessage('没有异常')
  else
  begin
    ShowMessage('异常信息 ' + TObject(ExceptionPtr).ToString);
    ReleaseExceptionObject;
  end;
end;

方法

System.ExceptObject

function ExceptObject: TObject;

unit

System

返回当前正在处理的异常的 Exception 对象。 如果当前没有处理异常,ExceptObject 返回 nil

ExceptObject 在异常变量(on <异常对象类型> do)不可访问时很有用。

ExceptObject 返回的对象在异常处理程序完成后可能不存在。 因此,不能使用 ExceptObject 来保留对异常对象的引用,或再次引发异常。 如果需要执行上述任何一项操作,请调用 AcquireExceptionObject

System.AcquireExceptionObject

function AcquireExceptionObject: TObject;

unit

System

保留对异常对象的访问。

AcquireExceptionObject 返回一个 TObject 给当前异常对象,并防止当前异常处理程序退出时异常对象被释放。

AcquireExceptionObject 会增加异常对象的引用计数。当不再需要异常对象时,确保减少引用计数。 如果使用异常对象再次引发异常,这会自动发生。 在所有其他情况下,对 AcquireExceptionObject 的每次调用都必须具有对 ReleaseExceptionObject 的匹配调用。 AcquireExceptionObject/ReleaseExceptionObject 序列可以嵌套。

System.ReleaseExceptionObject

procedure ReleaseExceptionObject;

unit

System

释放由 AcquireExceptionObject 获取的异常对象。

System.Error

procedure Error(errorCode: TRuntimeError);

unit

System

用于生成运行时异常。

参数

errorCode 定义要报告的错误类型。

posted @ 2023-03-18 17:22  txgh  阅读(210)  评论(0编辑  收藏  举报