memory leaks suchen



  • Ein kleines Projekt, das ich gerada code benutzt ein paar Libs, die vermutlich fehlerlastig sind. Einiges musste ich noch bearbeiten, befor man die überhaupt verwenden konnte.
    waroauf ich hinaus will ist, dass mein Programm doch so einige Memory Leaks aufweist. Zumindest laut einem Memory Tracer, den ich irgendwo vor langer Zeit runtergezogen habe. Wo genau sie sich befinden, wird leider nicht angezeigt. Anstatt Zeilennummern werden ?-Zeichen dargestellt. (Kann das eigentlich heißen, dass der Speicher reserviert wird, bevor new, delete, etc. von dem Mem Tracer überschrieben wird?)
    Ich könnte zwar die leaks ignorieren, ist aber nicht Sinn der Sache.
    Kann mir jemand eines Tool, bzw. Lib empfehlen, mit der ich die Fehler relativ schnell finden kann. Sollte aber kostenlos sein. Ich benutzte WinXP und GCC.



  • Die einfachste Variante wäre so etwas wie Efence einzusetzen. Das ist eine simple Library, die new/delete usw. überschreibt und einen Loging-Mechanismus einfügt.

    Ein richtigen Memorydebugger wie valgrind kenne ich für Windows nicht.



  • Entweder meinen bisherigen LeakFinder:
    http://www.codeproject.com/tools/leakfinder.asp
    oder meinen ganz neuen, der auch unter x64/IA64 läuft:
    http://blog.kalmbachnet.de/files/LeakFinder-RC5.zip



  • Wenn der Leakfinder nur ?? anzeigt, liegt es meist daran dass keine Debug-Symbole mehr da sind, aus denen sich die ursprünglichen Namen/Positionen herleiten lassen.

    Also ➡ Code auch immer im Debug-Modus compilieren, damit die Tools aus Zeigern Sätze machen können 😉



  • LordJaxom schrieb:

    Also ➡ Code auch immer im Debug-Modus compilieren, damit die Tools aus Zeigern Sätze machen können 😉

    Die Zeilen werden durch __LINE__ eingefügt. Außerdem kompiliere ich grundsätzlich im Debug-Modus.
    Der Mem Tracer, den ich verwende ist MMGR von http://www.fluidstudios.com. Ist ganz gut, bis auf das Problem, dass er manchmal nicht ausreichende Infos liefert. Und mit Problemen verbunden ist, wenn man new oder delete-Operatoren überlädt, bzw. free(), malloc() mit einem std:: davor aufruft.
    Die Leaks habe ich übrigens gefunden, die waren auf einer Seite der verwendeten Lib angegeben. Wie schön, dass es nicht an mir lag. (Ich weiß, Selbstlob stinkt 😉 )

    Übringens, danke für die Infos. Ich werde die anderen Leakfinder ausprobieren.



  • Jochen Kalmbach schrieb:

    Entweder meinen bisherigen LeakFinder:
    http://www.codeproject.com/tools/leakfinder.asp
    oder meinen ganz neuen, der auch unter x64/IA64 läuft:
    http://blog.kalmbachnet.de/files/LeakFinder-RC5.zip

    Mit GCC lässt sich er aber nicht ohne weiteres kompilieren.


Anmelden zum Antworten