delphi 输出异常信息()

输出异常信息

代码

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

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

ExceptObject 获取异常信息

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

AcquireExceptionObject 获取异常信息

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

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

Exception
ExceptObject

在异常变量(on <异常对象类型> do)不可访问时很有用。
由 返回的对象在异常处理程序完成后可能不存在。 因此,不能使用 来保留对异常对象的引用,或再次引发异常。 如果需要执行上述任何一项操作,请调用 。

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

ExceptObject

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

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 定义要报告的错误类型。

————————

输出异常信息

代码

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

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

ExceptObject 获取异常信息

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

AcquireExceptionObject 获取异常信息

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

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

Exception
ExceptObject

在异常变量(on <异常对象类型> do)不可访问时很有用。
由 返回的对象在异常处理程序完成后可能不存在。 因此,不能使用 来保留对异常对象的引用,或再次引发异常。 如果需要执行上述任何一项操作,请调用 。

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

ExceptObject

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

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 定义要报告的错误类型。