Memory Leaks

Startseite
Sie sind hier: Memory Leaks
Download
Frequently Asked Questions
Bestellen
Allgemeine Geschäftsbedingungen
Impressum

Was sind Memory Leaks?

Memory Leaks entstehen durch Fehler bei der Softwareentwicklung. Systemresourcen werden angefordert und nicht wieder freigegeben, wenn sie nicht mehr benötigt werden.

Die Konsequenzen, die sich daraus ergeben, sind schwerwiegend: Die betreffende Anwendung wird im Laufe der Zeit immer langsamer und das ganze System reagiert immer schwerfälliger und träger. Oft kommt es innerhalb eines solchen Szenarios dann auch zum Absturz von Anwendungen.

Finden von Memory Leaks mit FindLeak

Im Folgenden soll das Arbeiten mit FindLeak am Beispiel einer Speicherallokierung mit "AllocSysString" vorgestellt werden. Dieses Beispiel steht exemplarisch für all jene Fälle, in denen Speicher allokiert und nicht wieder freigegeben wird und stellt nur einen der vielen Anwendungsfälle dar, bei denen der Einsatz von FindLeak Sinn macht.

Starten Sie FindLeak.

Starten Sie die zu überwachende Anwendung. Als Beispiel verwenden wir hierzu die mitgelieferte Beispielanwendung "FindLeakDemo", innerhalb der wir links (in der Kategorie "Leak samples") den Button "AllocSysString" anklicken. In unserem Beispiel wird daraufhin Speicher belegt, der anschließend nicht wieder freigegeben wird. Unser Ziel ist es nun, dieses Ressourcenleck nachzuweisen und auf eine einfache Art und Weise zu lokalisieren.

   
 

   
Die gestartete Anwendung ist nun in FindLeak zu sehen. Nach dem Expandieren der TreeView-Darstellung sind auf der rechten Seite die momentan von der Anwendung belegten Speicherressourcen für Heap, Memory und GDI zu sehen.
   
 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

   
Damit neue Speicherallokierungen angezeigt werden können, markieren Sie in FindLeak Ihre Anwendung und klicken Sie dann mit der rechten Maustaste, damit sich das Kontextmenü öffnet. Hier wählen Sie bitte "Neue Allokierungen markieren" aus.
   
 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

   
Wir führen den fehlerhaften Code erneut aus, indem wir in unserem Beispielprojekt wieder links auf "AllocSysString" klicken.
 

 

Anschließend selektieren Sie bitte in der TreeView-Darstellung von FindLeak wieder den Eintrag "FindLeakDemo" und wählen hier "Heap" aus. In der Tabellenansicht auf der rechten Seite sind nun neue Einträge erschienen, die mit dem Präfix "01" vor "Num..." beginnen. Diese Einträge stehen für die in diesem Durchgang neu belegten Speicherplätze.
   
 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

   
   
Um weitere Speicherallokierungen durch erneutes Ausführen des fehlerhaften Codes zu demonstrieren, markieren Sie Ihre Anwendung in FindLeak erneut mit "Neue Allokierungen markieren" und klicken danach in der Demoanwendung nochmals auf "AllocSysString" (auf der linken Seite).
 

 

Es erscheinen weitere neue Einträge für Speicherbelegungen, die jetzt mit "02" vor "Num..." beginnen. Diese stehen für die beim zweiten Durchgang neu hinzugekommenen Allokierungen.
 

 

 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

   
   
Wiederholen Sie diese Schritte noch einige Male. Sie sehen, dass bei jedem Durchgang eine bestimmte Menge Speicher allokiert und nicht wieder freigegeben wird. In all diesen Fällen wird in der Tabellenspalte "Breakpoint" auf denselben Wert verwiesen. Sie haben jetzt den Nachweis erbracht, dass diese Anwendung allokierten Speicher nicht vollständig zurückgibt und haben eine Stelle im Programmcode gefunden, an der dieser Speicher nicht wieder zurückgegeben wird.
 

 

Um an dieser Stelle später zu debuggen, setzen Sie in FindLeak einen Breakpoint. Hierzu markieren Sie einen der Einträge, die in der Spalte "Breakpoint" auf denselben Wert verweisen. Im Kontextmenü wählen Sie nun "Anhalten bei Allokierung" aus.
 

 

 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

 

 

Das Symbol vor "Heap" in der TreeView-Ansicht verwandelt sich daraufhin in einen roten Blitz. Vor allen Einträgen in der Listenansicht im rechten Teil des FindLeak-Fensters, die auf dieselbe Speicherstelle verweisen, erscheint nun ebenfalls ein roter Blitz. Das Blitz-Symbol wird innerhalb von FindLeak verwendet, um einen Breakpoint darzustellen.
 

 

 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

 

 

Abschließend selektieren Sie in der TreeView Ihre Anwendung und klicken im Kontextmenü auf den Eintrag "Debugger starten". Daraufhin wird der Debugger Ihrer Entwicklungsumgebung gestartet.
 

 

 

Screenshot: Für eine größere Darstellung klicken Sie bitte auf das Bild

 

 

Wenn Sie den kritischen Programmcode jetzt ein weiteres Mal ausführen, wird das Programm an der markierten Stelle angehalten. Nun haben Sie die Möglichkeit, die gefundene Fehlerstelle im Debugger näher zu analysieren.
 

 

Sie haben nun gesehen, wie man mit Hilfe von FindLeak in kurzer Zeit sehr einfach ein Memory Leak lokalisieren kann. Wenn Sie jetzt neugierig darauf sind, das Ganze einmal selbst auszuprobieren und kennenzulernen, dann laden Sie doch einfach die kostenlose Demoversion von FindLeak herunter, die u.a. auch das hier vorgestellte Beispielprojekt enthält.
   

Startseite | Download Demo | FAQ | Bestellen | Allgemeine Geschäftsbedingungen | Impressum

Verantwortlich für den Inhalt dieser Website: cjt Systemsoftware AG.
Copyright © 2003.