Analysewerkzeuge in der UNIX-Programmierung

Willemers Informatik-Ecke

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.

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.

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.

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

Dmalloc und LeakTracer

Auch für die Erkennung von Speicherlecks gibt es Programmierhilfen. Man findet sie im Internet. Hier sind zwei Pakete exemplarisch genannt. dmalloc ist ein Tool für C-Programme, die ihren Speicher mit Hilfe der Funktion malloc() und anderer anfordern und mit free() freigeben, bzw. freigeben sollten. Der LeakTracer ist für die C++-Programmierer interessanter, da er die Aufrufe new und delete kontrolliert.

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