Fehlerbehandlung und Logging

Terrance & Philipp

Erfahrenes Mitglied
Hallo!

Wie kann man ein möglichst umfassendes Fehlererkennungssystem machen? Wie macht man das, dass man das nicht für jede Situation neu machen muss? Verschiedene Situationen ergeben auch verschiedene Fehler. Wie bringe ich die alle in ein einziges Fehlermanagementsystem. Und wenn es wichtig ist das die Operation trotzdem durchgeführt wird, wie ist das möglich?

Grüsse
Michael
 
Da musst du dich etwas präziser ausdrücken. Was für Fehler? Wo? Was für Operationen?

Gawayn
 
Stichwort Exception handling

Mit Exceptions, bzw. sog. Ausnahmen, kannst du schon eine recht Umfangreiche Fehlerbehandlung vornehmen.
Du kannst dann somit ganze Klassen, bzw. Objekte "werfen" (man wirft eine Exeception bzw. throw) und natürlich auch wieder "fangen". (catch)
Allerdings ist da auch vorsicht geboten, denn eine nicht gefangene Exception kann sehr schnell zu einem Absturz des Programmes führen.

Gruß Homer
 
Wenn du nur eine Funktion suchst, welche den zuletzt aufgetretenen Fehler auswertet, dann kannst du diese nehmen

Code:
void Fehler()
{
          LPVOID lpMsgBuf;
          FormatMessage( 
              FORMAT_MESSAGE_ALLOCATE_BUFFER | 
              FORMAT_MESSAGE_FROM_SYSTEM | 
              FORMAT_MESSAGE_IGNORE_INSERTS,
              NULL,
              GetLastError(),
              MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
              (LPTSTR) &lpMsgBuf,
              0,
              NULL 
          );
          // Process any inserts in lpMsgBuf.
          // ...
          // Display the string.
          MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | 
            MB_ICONINFORMATION );
          // Free the buffer.
          LocalFree( lpMsgBuf );
}

Da wird einfach der zuletzt aufgetretene Fehler ausgewertet und in einer Messagebox angezeigt
 
Was willst du denn auswerten? Logische Fehler, den Programmablauf oder was anderes? Wenn dein Quellcode syntaktisch korrekt ist, würde es sich empfehlen zum einen mit Exceptions zu arbeiten und zum andern wichtige Funktionsabläufe zu loggen. Am besten erstellst du dir dazu eine Klasse, speziell für's Fehlerloggen, initialisierst die Klasse am Anfang, gibst deinen anderen Klassen nen Zeiger auf die Fehlerklasse und mit der Fehlerklasse schreibst du dann zu jeder Funktion Erfolg oder Nichterfolg in eine Log-Datei. Kann man auch gut über Makros lösen, denen man nur die Klassenvariable und die aufzurufende Funktion übergibt (und vielleicht noch eine Zahl als Fehlercode). Das Makro soll dann eine if-Auswahl ausführen und ruft dann selbst die Methode in der übergebenen Klassenvariable auf und übergibt ihr den Fehlercode. Deine Funktionen müssten dann nur einheitliche Werte zurückgeben.
 
Zurück