Praktikum
Programmiersprache C - Preprozessor
Zur
Fehlersuche an Programmen benutzt man sehr häufig Debugger. Viele
IDEs stellen sehr komfortable Debugger bereit, unter Linux gibt es den
kdbg und ddd, die beide auf dem kommandozeilenorientierten gdb
basieren. Mitunter ist der Einsatz von Debuggern jedoch schlecht
möglich, etwa bei Echtzeitanforderungen, parallelen
Anwendungen oder bei häufiger Rekursion. In solchen Fällen
ist es oft sinnvoll, Infomationen in eine log-Datei zu schreiben und im
Anschluss auszuwerten. Dieses Logging sollte mit bedingter
Übersetzung programmiert werden, damit nicht in der
Auslieferungsversion noch Testausgaben, die dem Anwender verborgen bleiben sollten,
geschrieben oder ausgegeben werden. Macros bieten sich für diese
Aufgabe an.
Stellen Sie
ein Headerfile zusammen, in dem Macros definiert werden,
die bedingt übersetzt werden, wenn das Symbol DEBUG definiert ist.
Die Macros sollen Strings, Intergerwerte, Zeichen und long-Werte in
eine Datei ausgeben, die auch nach einem Programmabsturz möglichst
viele Informationen enthält. Vereinbaren Sie in dem Headerfile
eine Filevariable mit
extern FILE *ProtFile;
über diese
Datei soll das Logging erfolgen. Es sollen Macros der Form
#define DEBUG_STR(Str ) {\
if (ProtFile==NULL) ProtFile=fopen(FNAME,"w");\
fprintf(ProtFile,"%s",Str);\
fclose (ProtFile);\
ProtFile=fopen(FNAME,"a");\
}
#define DEBUG_INT(i) ...
#define DEBUG_CHR(c) ...
...
bereitgestellt
werden.
Nach jedem Schreibvorgang ist die Protokolldatei zu schließen, um
den Pufferinhalt in der Datei zu speichern.
Testen Sie das
Headerfile, indem Sie es in ein beliebiges C-Programm
einbinden und bei der Übersetzung des C-Programms das Symbol DEBUG
setzen.
gcc
-DDEBUG myprogr.c
-
-
Werten Sie die erzeugte log-datei aus.
- Erzeugen
Sie die precompilerte Zwischendatei und suchen Sie darin die
expandierten Macros mit und ohne defiertes Symbol DEBUG.
gcc -DDEBUG -E myprogr.c >
myprog.e
-