Assert

Adam Boduch
Assert
Moduł: System
```delphi procedure Assert(expr : Boolean [; const msg: string]); ``` [[Delphi/Funkcje|Funkcja]] może być wykorzystywana w trakcie procesu debuggingu aplikacji i/lub "wyłapywaniu" błędów w aplikacjach. Jest to dość specyficzna funkcja gdyż jej użycie powoduje wywołanie wyjątku `EAssertionFailed`. Kompilator napotykając na wywołanie tej funkcji, zapisuje numer linii oraz nazwę pliku w jakim została użyta.

Funkcja zostanie użyta tylko wówczas gdy wartością parametru expr jest False. Drugi, opcjonalny parametr może zawierać treść przekazywaną do klasy wyjątku.

Właściwie jeżeli wartością parametru expr jest False, Delphi wywołuje procedurę, której adres wskazuje zmienna AssertErrorProc.

Działanie funkcji Assert może zostać wyłączone przy użyciu dyrektywy $ASSERTIONS.

Przykładowa obsługa błędu polegająca na zapisywaniu wszelkich wystąpień do dziennika (plik logu):

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

1 komentarz

Nie wiem, czy w Delphi jest tak samo, ale w C++ Assert jest makrem, które działa tylko jeśli generujemy kod z opcją 'debug'. Jeśli w opcjach ustawimy 'release' to Assert przestanie działać.