Programowanie w języku Delphi

AssertErrorProc

  • 2010-10-31 18:27
  • 0 komentarzy
  • 742 odsłony
  • Oceń ten tekst jako pierwszy
AssertErrorProc
Moduł: System

var AssertErrorProc: Pointer;

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ż: