AssertErrorProc

Adam Boduch
AssertErrorProc
Moduł: System
```delphi var AssertErrorProc: Pointer; ``` [[Delphi/Zmienne globalne|Zmienna globalna]] przechowuje adres do procedury, która zostanie wywołana gdy nastąpi wyjątek `EAssertionFailed`.

W momencie wywołania funkcji Assert, Delphi uruchamia domyślną procedurę obsługi błędu. Programista może napisać własną procedurę, która - np. w wyniku błędu, zapisywać będzie informacje o błedzie do pliku dziennika (log) lub dokonywać będzie innych, dowolnych działań. Własna procedura obługi błędów musi mieć następujący nagłówek:

procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);

W momencie wywołania funkcji Assert, do tej procedury zostaną przekazane parametry w postaci:

  • Message - komunikat błędu (parametr funkcji Assert),
  • FileName - nazwa pliku w którym wywołana została funkcja Assert,
  • LineNumber - linia w kodzie źródłowym, w którym wystąpił błąd (czyli również - de facto - linia w której kompilator odnajdzie wywołanie funkcji Assert),
  • ErrorAddr - wskaźnik do błędu.

Oto przykład programu, który posiada własną procedurę obsługi błędów. Błędy zapisywane są do pliku dziennika:

program Foo;

{$APPTYPE CONSOLE}

uses
  SysUtils;

procedure MyAssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
var
  TF : TextFile;
begin
  AssignFile(TF, 'C:\error.log');
  try
    if FileExists('C:\error.log') then
      Append(TF)
    else Rewrite(TF);

    { logowanie błędu do pliku }
    Writeln(TF, Format('%s: %s w linii %d, adres błędu: $%x',
      [FileName, Message, LineNumber, Integer(ErrorAddr)])
    );
  finally
    CloseFile(TF);
  end;
end;

begin
  { przypisanie procedury obsługi błędu }
  AssertErrorProc := @MyAssertErrorHandler;

  { wywołanie błędu }
  Assert(False, 'Celowe wystąpienie błędu');

  Readln;
end.

Zobacz też:

0 komentarzy