Ja, Rational Purify sollte den gleichen Zweck erfüllen, zu finden unter http://www-306.ibm.com/software/awdtools/purify/win/, gibt es allerdings nur als Trial Version für 14 Tage, sollte aber für einmaligen Gebrauch seinen Zweck erfüllen. |
Arbeitsweise |
Bei Durchsicht der verschiedenen frei verfügbaren Tools fällt schnell auf, dass es keine eierlegende Wollmilchsau gibt. Will man seine Anwendung mal so richtig durchchecken, muss man die Werkzeuge der Reihe nach durchprobieren. Kommerzielle Tools, wie Rational Purify versprechen mehr Komfort.
ToDo: Halten die Kommerziellen Tools, was sie versprechen? ToDo: Einige Techniken exemplarisch anreißen.
Frei verfügbar |
Kommerziell |
Interpretersprachen |
In Script- und Interpretersprachen kann ein Teil der Speicherverwaltung außerhalb der Virtuellen Maschine stattfinden. In solchen Fällen müssen neben den oben genannten Speichercheckern weitere Werkzeuge zum Einsatz kommen. Diese sind meist sehr gut in die Entwicklungsumgebung integriert, aber die Werkzeugpalette sieht ähnlich aus: Profiler, Tools die Footprints vergleichen, Tools für Memory-Tracing, etc...
Erfahrungsberichte und Tipps |
Tipp: Memory Snapshots vergleichen |
In Verbindung mit einem GarbageCollector sucht man mit einem Speicherchecker vor allem nicht gekappte Referenzen. Solche verhindern, dass eigentlich nicht mehr benötigte Objekte vom GC erfasst und weggeräumt werden. Hier sind Memory-Footprint Vergleiche äußerst hilfreich.
Dazu ein in SpracheSmalltalk sehr typisches, leicht übertragbares Beispiel: Beim MVC EntwurfsMuster ( WardsWiki:ModelViewController) spielt der View die Rolle eines Beobachters des Models ( WardsWiki:ObserverPattern). Wenn also ein Vergleich zweier Memory-Footprints unerwartet viele GUI-Objekte ausweist, dann hat man beim Schließen der betroffenen Fenster vermutlich vergessen, die Beobachterbeziehung zwischen Model und View zu beenden.
Erfahrungsbericht: Electric Fence, Valgrind, Memprof |
Electric Fence war für unser Projekt (ca. 3 Entwickler/2 Jahre/C++/Linux) von eher geringem Nutzen, weil die Palette der gefundenen Fehler nicht besonders groß ist. Läuft die zu debuggende Anwendung eh schon am Limit dessen, was der Entwicklungsrechner hergibt, hat man mit Debugger und Electric Fence noch zwei zusätzliche Speicherverbraucher und Performanzkiller am Start. Die Benutzung ist jedoch einfach, und bevor man gar keine Tools einsetzt...
Valgrind hat bei uns im Projekt alle begeistert. Nach den eher mäßigen Resultaten mit Electric Fence hatten wir nun gleich eine ganze Reihe von Warnungen, denen wir nachgehen konnten. Binnen kürzester Zeit waren zwei Bugs und viele unschöne Kleinigkeiten gefunden. Und die Bedienung: Simpler geht's wohl kaum, höchstens mit einer GUI.
Memprof sieht so aus, als könnte es ein nettes Tool sein. Aber ich konnte partout nichts damit anfangen. Ich habe es mit verschiedenen Programmen versucht: ein paar kleinen C-Programme, fette C++ Programme, Anwendungen mit und ohne GUI. Mir scheint, es ist überhaupt nur für C geeignet und dort eher für kleinere Progrämmchen. Aber ich kann auch völlig falsch liegen. Letztlich krankt die Benutzung daran, dass es weder Doku noch eine rege Benutzergruppe zu geben scheint. -- SaschaDördelmann
Diskussion |
Kennt jemand einen freien Speicherchecker für Windows? So eine Art Valgrind für Windows (ohne cygwin/mingw) wäre z. B. cool. -- SaschaDördelmann
Ja, Rational Purify sollte den gleichen Zweck erfüllen, zu finden unter http://www-306.ibm.com/software/awdtools/purify/win/, gibt es allerdings nur als Trial Version für 14 Tage, sollte aber für einmaligen Gebrauch seinen Zweck erfüllen.