Programowanie w języku Delphi

Assert

  • 2010-10-31 18:27
  • 2 komentarze
  • 1799 odsłon
  • Oceń ten tekst jako pierwszy
Assert
Moduł: System

procedure Assert(expr : Boolean [; const msg: string]);

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

2 komentarze

Brak avatara
morgan 2013-12-31 09:10

Czytelny i bardzo dobry przykład - z reszta jak wszystkie książki o Delphi autora z którymi pracuje i z których korzystam już od dobrych 12 lat.

Marooned 2006-03-06 14:16

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ć.