Bemerkung:
Die angegebenen Werkzeuge besitzen in der Regel eine Vielzahl weiterer
Aufrufparameter, die hier nicht diskutiert werden.
lint
lint fileÜberprüft Programme auf potentielle Probleme
Beispiel:
Quelltextdatei runden.c:
#include <stdio.h>
void main(void)
{
float x, y;
long i;
x = 1.0;
y = 3.0;
x = x/y;
i = *(int *)&x;
printf("1/3 = %8x\n", i);
}
Eine Analyse des obigen Quelltexts mit lint liefert unter AIX:
"runden.c", line 13: warning: main() returns random value to invocation
environment
"stdio.h", line 205 ("llib-lc"): warning: function printf return value is
always ignored
Das obige C-Programm ist syntaktisch korrekt. Es birgt jedoch folgendes
Problempotential in sich:
lclint filename1 ...Quelltextprüfung, ähnlich wie lint.
cflow
cflow filename1 ...Ermittelt in C-Quelltext- und Objektcode-Dateien externe Referenzen.
Beispiel:
Eine Quelltext-Analyse des unter lint angegebenen Beispielprogramms
liefert:
1 main: (void) void,cflow wird im Zusammenhang mit in einigen Unix-Systemen zur Verfügung gestellt.2 printf: (* const char, ellipsis) int, <>
calls
calls filename ...Ermittelt Funktionsaufrufe in C-Quelltextdateien in hierarchischer Weise.
Beispiel:
Eine Analyse des Beispielprogramms runden.c liefert:
1 main [runden.c]
2 printf
Der Aufruf calls -e runden.c liefert unter AIX:
1 main [runden.c]
2 printf
Index:
_filbuf
_flsbuf
clearerr
ctermid
cuserid
fclose
fdopen
feof
ferror
fflush
fgetc
fgetpos
fgets
fgetwc
fgetws
fileno
fopen
fp_read_rnd
fp_swap_rnd
fprintf
fputc
fputs
fputwc
fputws
fread
freopen
fscanf
fseek
fsetpos
ftell
fwrite
getc
getchar
gets
getw
getwc
getwchar
getws
main [runden.c] [see line 1]
pclose
perror
popen
printf
putc
putchar
puts
putw
putwc
putwchar
putws
remove
rename
rewind
scanf
setbuf
setvbuf
sprintf
sscanf
tempnam
tmpfile
tmpnam
ungetc
ungetwc
vfprintf
vprintf
vsprintf
c_count
c_count filename ...Ermittelt statistische Angaben über C-Quelltextdateien.
Beispiel:
Eine Analyse des oben angegebenen Programm runden.c liefert:
13 7 |runden.c
----------------
13 7 total lines/statements
0 lines had comments 0.0 %
0 comments are inline 0.0 %
2 lines were blank 15.4 %
1 lines for preprocessor 7.7 %
10 lines containing code 76.9 %
13 total lines 100.0 %
0 comment-chars 0.0 %
0 nontext-comment-chars 0.0 %
42 whitespace-chars 29.2 %
17 preprocessor-chars 11.8 %
85 statement-chars 59.0 %
144 total characters 100.0 %
25 tokens, average length 2.32
0.00 ratio of comment:code
cb
cb filename1 ...Grafische Aufbereitung von C-Quelltexten
Beispiel: Quelltextdatei unlesbar.c
#include <stdio.h>
#include <time.h>
int main(int argc,char *argv[]){time_t t;
if(argc==1)printf("%s an alle Nutzer !\n",*argv);
else {printf("%s an ",*argv);while(--argc) printf("%s ",*(++argv));
printf("\n");}
time(&t);printf("%s/n",ctime(&t));return 0;}
Der Aufruf cb unlesbar.c erzeugt folgende Ausgabe:
#include <stdio.h>
#include <time.h>
int main(int argc,char *argv[]){
time_t t;
if(argc==1)printf("%s an alle Nutzer !\n",*argv);
else {
printf("%s an ",*argv);
while(--argc) printf("%s ",*(++argv));
printf("\n");
}
time(&t);
printf("%s/n",ctime(&t));
return 0;
}
cb beseitigt nicht alle Mängel im Notationsstil, läßt
aber in jedem Fall die Programmstruktur besser sichtbar werden. obscure
obscure filename obscure -u filenameTransformiert eine Quelltextdatei:
Beispiel:
obscure -u runden.c transformiert das obige Beispielprogramm wie
folgt:
#include <stdio.h>
void main(void){float q0,q1;long q2;q0=1.0;q1=3.0;q0=q0/q1;q2=*(int*)&q0;
printf("1/3 = %8x\n",q2);}
highlight
highlight filenameFarbliche Hervorhebung von syntaktischen Konstruktionen in einer C-Quelltextdatei.
protoize
protoize file1 ...Transformation von C-Quelltextdateien:
Von jeder zu transformierenden Datei wird eine Sicherheitskopie angelegt.
Beispiel:
int test(x, c, d)
int x;
char c;
double d;
wird transformiert zu
int test(int x, char c, double d)
unprotoize
unprotoize file1 ...Transformation von C-Quelltextdateien:
Von jeder zu transformierenden Datei wird eine Sicherheitskopie angelegt.
Beispiel:
int test(int x, char c, double d)
wird transformiert zu
int test(x, c, d)
int x;
char c;
double d;
prof
profErzeugt Ausführungsprofil eines Programms:
Um das Ausführungsprofil eines Programms zu erhalten, sind folgende Schritte erforderlich:
cc -p -o bsp bsp.c
bspIm aktuellen Verzeichnis wird eine (binäre) Analysedatei mon.out angelegt.
profDas Analyseprotokoll wird auf die Standardausgabe ausgegeben.
Name %Time Seconds Cumsecs #Calls msec/call .main 0,0 0,00 0,00 1 0, .catopen 0,0 0,00 0,00 1 0, .setlocale 0,0 0,00 0,00 1 0, .getenv 0,0 0,00 0,00 1 0, ._doprnt 0,0 0,00 0,00 2 0, ._xflsbuf 0,0 0,00 0,00 2 0, ._wrtchk 0,0 0,00 0,00 1 0, ._findbuf 0,0 0,00 0,00 1 0, ._xwrite 0,0 0,00 0,00 2 0, .free 0,0 0,00 0,00 2 0, .free_y 0,0 0,00 0,00 2 0, .write 0,0 0,00 0,00 2 0, .exit 0,0 0,00 0,00 1 0, .moncontrol 0,0 0,00 0,00 1 0, .monitor 0,0 0,00 0,00 1 0, .ioctl 0,0 0,00 0,00 3 0, .__ioctl 0,0 0,00 0,00 3 0, .isatty 0,0 0,00 0,00 3 0, .fwrite 0,0 0,00 0,00 4 0, .memchr 0,0 0,00 0,00 4 0, .ctime 0,0 0,00 0,00 1 0, .localtime 0,0 0,00 0,00 1 0, .gmtime 0,0 0,00 0,00 1 0, .asctime 0,0 0,00 0,00 1 0, .tzset 0,0 0,00 0,00 1 0, .printf 0,0 0,00 0,00 2 0,Für dieses sehr einfache Beispiel ist sicher vor allem interessant, welche Funktionen insgesamt für die Abarbeitung des Programms benötigt werden.
gprof
gprofErzeugt Ausführungsprofil eines Programms:
Um das Ausführungsprofil eines Programms zu erhalten, sind folgende Schritte erforderlich:
cc -pg -o bsp bsp.c
bspIm aktuellen Verzeichnis wird eine (binäre) Analysedatei gmon.out angelegt.
gprofDas Analyseprotokoll wird auf die Standardausgabe ausgegeben.
sccs ...Source Code Control System - Versionsverwaltung
od
od -x filename1 ...Zeigt eine Datei in Hexadezimaldarstellung an.
Ohne Angabe einer Option benutzt od Oktaldarstellung (octal dump).
Weitere Aufrufmöglichkeiten:
od -t a filename Anzeige als ASCII-Zeichen od -t a -x filename kombinierte Anzeige ASCII - Hexadezimaladb
adb ...Debugger
grep
grep muster filename1 ...grep filtert aus den angegebenen Dateien die Zeilen heraus, in denen das angegebene Muster auftritt.
Beispiel:
grep laenge *.cErmittelt die Quelltextdateien, in denen das Muster laenge auftritt und listet die entsprechenden Zeilen auf.
strings
strings filename1 ...Sucht nach druckbaren Zeichenketten in Objektcode- und ausführbaren Dateien.
make
Unterstützung für Programmprojekte
ifnames
ifnames filename1 ...Listet alle Bezeichner auf, die in den angegebenen Quelltextdateien in #if, #elif, #ifdef, oder #ifndef Direktiven verwendet werden.
autoconf
Unterstützung für die Erstellung eines Installationsskripts für Programmsysteme.