|
|
Speicherlecks und -überläufeFehler 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. Ein anderes Problem ist der Zugriff über die Speicherränder. Wurde eine Zeichenkette von 120 Byte Länge in einen Speicher kopiert, der nur eine Länge von 100 Byte hat, 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ß, welche Variablen verändert wurden und an welcher Stelle im Programm diese verwendet werden, 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 FenceElectric 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 wird 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 LeakTracerAuch für die Erkennung von Speicherlecks gibt es Programmierhilfen. Man findet sie im Internet, indem man in den Suchmaschinen nach Begriffen wie »memory leak« sucht. Die Werkzeuge arbeiten normalerweise als Bibliotheken, die die normalen Schnittstellen für das Anfordern und Freigeben von Speicher anbieten. Dabei protokollieren sie, ob alle angeforderten Speicherbereiche auch korrekt wieder freigegeben werden.
Hier sind zwei Pakete exemplarisch genannt. dmalloc ist ein
Tool für C-Programme, die ihren Speicher mit Hilfe der Funktion
Beide Programme sind kostenlos im Web zu bekommen. Quelle:
http://dmalloc.com
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|