Next: Erweiterungsvorschläge Up: Die Gerätetreiber-Klassenbibliothek Previous: Die Datenbankklasse

Die Errorklasse

Um in herkömmlichen C-Programmen Meldungen auszugeben, benutzt man normalerweise die Funktion printf oder fprintf. Mit Hilfe dieser Funktion kann man Werte mit verschiedenen Datentypen ausgeben (int, float, char, etc.). Dazu muß der Funktion ein Format-String mit Informationen über die auszugebenden Datentypen und die Daten selbst als Parameter übergeben werden. Das sieht z.B. so aus:


int tag = 27;
char monat[] = "Mai";
printf("Heute ist der %d. %s\n", tag, monat);
fprintf(stderr, "Heute ist der %d. %s\n", tag, monat);

Hierbei bedeutet %d, daß eine ganze Zahl, und %s, daß eine Zeichenkette ausgegeben werden soll. Wenn die Parameter falsch angegeben wurden, wird das eventuell erst bei der Ausführung des Programms bemerkt. Neue Datentypen müssen in ihre Komponenten zerlegt werden und können erst dann über die vorhandenen Typen ausgegeben werden.

Die Programmiersprache C++ bietet eine einfachere Möglichkeit. Hier wird bei der Übersetzung in Programmcode anhand der Datentypen der auszugebenden Werte erkannt, welche Ausgaberoutine verwendet werden muß. Es gibt verschiedene Ausgabegeräte (z.B. cout und cerr) und dazu passend den Operator <<, mit dem man Daten ausgeben kann. Für die Grunddatentypen ist er vordefiniert, kann aber für weitere zusätzlich definiert und dann genauso mit den vordefinierten zusammen benutzt werden. Oben genanntes Beispiel sieht dann so aus:


int tag = 27;
char monat[] = "Mai"
cout << "Heute ist der " << tag << ". " << monat << endl;
cerr << "Heute ist der " << tag << ". " << monat << endl;

Für die Fehlerausgabe wurde nun ein neues Ausgabegerät error erstellt. Es läßt sich analog wie die C++ Ausgabegeräte benutzen.


int tag = 27;
char monat[] = "Mai"
error << "Heute ist der " << tag << ". " << monat << endl;

Man kann durch einen Parameter bestimmen, ob die Meldungen auf dem Terminal ausgegeben werden, oder ob sie über das Messagesystem an den opcon-Prozeß geschickt werden. Dadurch ist es möglich, erst beim Programmstart festzulegen, wie sich das Programm verhalten soll. Für das Austesten startet man es mit einem Terminal als Ausgabegerät und kann hier dann auch direkt die Fehlermeldungen erhalten. Im Normalfall wird man das Programm aber als Dämon starten und die Fehlermeldungen über das Messagesystem an zentraler Stelle mit den anderen Prozessen überwachen.

Eine andere Möglichkeit ist das Einstellen von Ausgabestufen beim Programmieren der Ausgaben. Dafür wird wie folgt die Funktion level mit der Ausgabestufe als Parameter aufgerufen:


error << "Beginn der Funktion X" << level(500) << endl;

Wichtige Meldungen erhalten niedrige Stufen, weniger wichtige höhere Stufen. Beim Programmlauf ist es dann möglich, anzugeben, bis zu welcher Stufe Meldungen ausgegeben werden sollen. Diese Fähigkeit ist nützlich zur Fehlersuche. Man kann z.B. bei jedem Funktionsaufruf die Stufe erhöhen und beim Verlassen der Funktion wieder erniedrigen. Dadurch erreicht man, daß man den Programmablauf bei Bedarf mehr oder weniger tief in die Funktionen hinein verfolgen kann. Für diese Vorgehensweise stehen fertige Funktionen zur Verfügung. Auch die ECS-Funktionen, mit deren Hilfe die Kommunikation über das Messagesystem stattfindet, benutzen dieses Konzept.

Mit der Benutzung der oben beschriebenen Device-Klasse (siehe Abschnitt ) wird automatisch eine globale Instanz der Error-Klasse angelegt, und mit Hilfe der Programmparameter wird der Ausgabekanal, also Terminal oder Messagesystem, und die Ausgabestufe eingestellt.



Next: Erweiterungsvorschläge Up: Die Gerätetreiber-Klassenbibliothek Previous: Die Datenbankklasse


martin@daisy.zdv.Uni-Mainz.DE
Fri Apr 21 10:02:42 MESZ 1995