Analysewerkzeuge in der UNIX-Programmierung |
Neben den Debuggern, die natürlich auch der Analyse dienen, gibt es eine Reihe Werkzeuge, die den Ablauf von Programmen verfolgen. Teils dienen diese Werkzeuge dazu, die Performance eines Programmes zu ermitteln und zu verbessern. Teils suchen sie nach schleichenden Fehlern wie Speicherlecks. Hier werden einige dieser Werkzeuge herausgegriffen ohne Anspruch auf Vollständigkeit.
Electric Fence ist eine Bibliothek, die beim Generieren des Programmes hinzu
gebunden werden und sich an die Stelle der Funktionen setzt, die normalerweise
die Speicherverwaltung durchführen. Der einzige Unterschied zur normalen
Entwicklung ist also das Hinzubinden der Bibliothek.
Systemaufrufe verfolgen: strace und ltrace
strace
Das Tool strace wird mit einem Programm als Parameter gestartet und
zeigt dessen Systemaufrufe inklusive der Parameter und Rückgabewerte an.
ltrace
Mit ltrace lassen sich Bibliotheksaufrufe verfolgen.
Beide Programme erfordern nicht, dass das zu beobachtende Programm vorher mit
Debug-Option compiliert wurde.
Speicherlecks und -überläufe
Speicherlecks können Performance drücken
Fehler in der Speicherverwaltung sind schwer zu finden. Das Phänomen eines
>>Speicherlecks<< bedeutet, dass Speicher angefordert wird, aber nicht mehr
freigegeben wird. So ein Fehler ist bei manchen einfachen Anwendungsprogrammen
fast kein Problem. Kaum jemand würde es je bemerken. Läuft aber das Programm
als Dämon auf einer Maschine, die vielleicht monatelang ohne Unterbrechung
läuft, entzieht das Programm auf lange Sicht allen anderen Programmen den
Speicher und die Maschine wird immer langsamer.
Buffer Overruns erzeugen überraschende Probleme
Ein anderes Problem ist der Zugriff über die Speicherränder. Wurde eine
Zeichenkette von 120 Byte Länge in einen Speicher kopiert, der nur mit der
Länge 100 angefordert wurde, befinden sich 20 Byte in Speicherbereichen, wo
sie nichts verloren haben und ggf. andere Variablen überschreiben. Man spricht
hier vom Buffer Overrun. Da man nie weiß, wann dieses Ereignis eintritt, kommt
ein Kollaps fast immer überraschend. Auch die Wirkung ist schwer vorhersehbar,
da sich nicht abschätzen lässt, welche Daten zerstört werden.
Die Bibliothek Electric Fence
Electric Fence (übersetzt etwa Elektrozaun) überprüft, ob die Grenzen von
Puffern überschritten werden und ob Speicherbereiche verwendet werden, die
in der Zwischenzeit wieder frei gegeben wurden.
cc -o fehler fehler.c -lefence |
Das Programm wird danach aus einem Debugger gestartet. Bei erkannten Verletzungen wird ein Signal ausgelöst, das einen Zusammenbruch auslöst. Der Debugger kann dann leicht mit einem entsprechenden Kommanodo (where beim gdb) feststellen, wo dieser Fehler aufgetreten ist.
Quelle: http://perens.com/FreeSoftware
Beide Programme sind kostenlos im Web zu bekommen. Quelle:
http://dmalloc.com
http://www.andreasen.org/LeakTracer/
Diese Seite basiert auf Inhalten aus dem Buch
Arnold Willemer: Wie werde ich UNIX-Guru Verlagsrechte bei galileo computing |
Homepage |
(C) Copyright 2002 Arnold Willemer
|