Im Folgenden soll das Arbeiten und die Funktionen von FindLeak
mit der FindLeak- Demo-Version veranschaulicht werden. In diesem
Beispiel wird Speicher allokiert und nicht wieder freigegeben.
Dies ist nur einer von vielen Anwendungsfällen, 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. |
|
|
|
 |
|
|
 |
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.
|
|
|
|
 |
|
|
 |
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.
|
|
|
|
 |
|
|
|
|
 |
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.
|
|
|
|
 |
|
|
|
|
 |
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.
|
|
|
|

|
|
|
 |
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.
|
|
|
|

|
|
|
 |
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.
|
|
|
|

|
|
|
 |
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.
|
|
|