Ich habe mich mit Valgrind befasst, um meine C-Codierung / Debugging zu verbessern, als ich herausfand, dass es nur für Linux ist. Ich habe kein anderes Bedürfnis oder Interesse daran, mein Betriebssystem auf Linux umzustellen, und habe mich gefragt, ob es ein ebenso gutes Programm für Windows gibt.
210
Antworten:
Einige weitere gute kommerzielle Tools:
quelle
Wie jakobengblom2 hervorhob, hat valgrind eine Reihe von Werkzeugen. Je nachdem, von welchem Sie sprechen, gibt es unterschiedliche Fenstergegenstücke. Ich werde hier nur OSS oder kostenlose Tools erwähnen.
1. MemCheck:
Dr. Memory. Es ist ein relativ neues Tool, das unter Windows 7 sehr gut funktioniert. Meine Lieblingsfunktion ist, dass es die Zuordnungsstapel derselben Lecks im Bericht gruppiert.
http://code.google.com/p/drmemory/
Ich habe auch UMDH ( http://support.microsoft.com/kb/268343 ) verwendet und fand es sehr nützlich und einfach einzurichten . Es funktioniert von Win2000 bis Win7.
AppVerifier ist ein Muss für Entwickler von nativem Windows-Code. Der "Speicher" -Prüfer erledigt ähnliche Aufgaben. Http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
2. Callgrind:
Mein Favorit ist verysleepy ( http://www.codersnotes.com/sleepy ) Es ist winzig, aber sehr nützlich und einfach zu bedienen.
Wenn Sie weitere Funktionen benötigen, ist AMD CodeAnalyst ™ Performance Analyzer kostenlos: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Die Windows-Tools zur Leistungsanalyse sind kostenlos von Microsoft, nicht sehr einfach zu verwenden, können jedoch die Arbeit erledigen, wenn Sie bereit sind, die Zeit zu verbringen. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Download: http://msdn.microsoft.com/en-us/performance / cc752957
3. Massiv:
Ähnliche (nicht ganz exakte Übereinstimmung) kostenlose Tools unter Windows sind:
VMMap von sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533
Befehl! heap in windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. Cachegrind:
Die oben genannten Windows-Leistungstools verfügen über eine bestimmte Fähigkeit zur Erstellung von L2-Cache-Fehlprofilen, sind jedoch nicht ganz so gut und einfach zu verwenden wie Cachegrind.
5. DRD:
Ich habe noch nichts kostenloses und so leistungsfähiges unter Windows gefunden. Das einzige kostenlose Tool für Windows, das ich in der Nähe finde, ist der "Lock" -Prüfer in AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx
quelle
Warum nicht Valgrind + Wine zum Debuggen Ihrer Windows-App verwenden? Siehe http://wiki.winehq.org/Wine_and_Valgrind
(Chromium verwendet dies, um die Windows-Version auf Speicherfehler zu überprüfen. Siehe build.chromium.org, sehen Sie sich die experimentellen oder Speicherwasserfälle an und suchen Sie nach Wein.)
Es gibt auch Dr. Memory, siehe dynamorio.org/drmemory.html
quelle
Versuchen Sie für Visual C ++ Visual Leak Detector . Als ich es benutzte, erkannte es einen Speicherverlust bei einem
new
Anruf und gab die tatsächliche Zeile im Quellcode des Lecks zurück. Die neueste Version finden Sie unter http://vld.codeplex.com/ .quelle
Die von Ihnen verwendete Entwicklungsumgebung für Windows enthält möglicherweise eigene Tools. Mit Visual Studio können Sie beispielsweise Speicherlecks in Ihren Programmen erkennen und isolieren
quelle
Ich möchte ein Tool auflisten, hoffe, dass es nützlich sein wird
Lesen Sie diesen Artikel für weitere Details
quelle
Versuchen Sie es mit DUMA
quelle
Es gibt Pageheap.exe Teil der Debugging-Tools für Windows. Es ist kostenlos und im Grunde ein benutzerdefinierter Speicher-Allokator / Deallocator.
Siehe http://support.microsoft.com/kb/286470
quelle
gflags
+gdb
(von mingw) hilfreich bei der Diagnose.In Kombination mit Visual Studio verwende ich im Allgemeinen Visual Leak Detector oder einfach _CrtDumpMemoryLeaks (), einen Win32-API-Aufruf. Beide sind nichts Besonderes, aber sie erledigen den Job.
quelle
Ich hatte in der Vergangenheit die Möglichkeit, Compuware DevPartner Studio zu verwenden, und das war wirklich gut, aber es ist ziemlich teuer. Eine billigere Lösung könnte GlowCode sein . Ich habe gerade mit einer 5.x-Version gearbeitet und trotz einiger Probleme beim Anhängen an einen Prozess, den ich zum Debuggen benötigte, hat es ganz gut funktioniert.
quelle
Ich habe Memory Validator von einer Firma namens Software Verification geliebt.
quelle
Viusual Studio kann dabei helfen, Speicherlecks selbst zu erkennen. Siehe Microsoft Visual C ++ - Tipps und Tricks -> Abschnitt "Speicherverluste". Siehe auch dies Beitrag in SO
Eine echte Ablaufverfolgung ist zwar nur mit der Team Edition von Visual Studio möglich.
quelle
Eine Liste ähnlicher Tools finden Sie unter dem Link " Source Test Tools " auf der Seite "Software QA Testing and Test Tool Resources".
Ich habe in der Vergangenheit BoundsChecker, DevPartner Studio und Intel V-Tune für die Profilerstellung verwendet. Ich mochte V-Tune am besten; Sie könnten verschiedene Intel-Chipsätze emulieren und erhalten Hinweise zur Optimierung für diese Plattform.
quelle
Ist der Memory Leak Detector von Jochen Kalmbach qualifiziert?
PS: Die URL zur neuesten Version ist irgendwo im Kommentarthread des Artikels vergraben.
quelle
LeakDiag, UMDH, App Verifier und DebugDiag sind nützliche Tools, um die Robustheit des Codes zu verbessern und Speicherlecks zu finden.
quelle
Die Boost-Test-Bibliothek kann Speicherlecks erkennen.
quelle
Wie wäre es mit der Reinigung ?
quelle
Probieren Sie das Inspector XE-Produkt von Intel aus, mit dem Sie sowohl Speicher- als auch Threading-Probleme erkennen können: http://software.intel.com/en-us/articles/intel-inspector-xe/
quelle
Vielleicht ist CodeSnitch etwas, wonach Sie suchen? http://www.entrek.com/codesnitch.html
quelle
Wenn Sie mit Borland / CodeGear / Embarcadero C ++ Builder entwickeln, können Sie CodeGuard verwenden.
quelle
Mehr oder weniger alle Profiler prüfen auf Speicherlecks und zeigen Ihnen den Stapel, als der Speicher zugewiesen wurde.
Ich kann Intel Parallel Inspector empfehlen . Einfach zu bedienen und keine Neukompilierung erforderlich. Die Testversion läuft 30 Tage.
GlowCode und AtromatedQA enthalten auch solche Fähigkeiten. Sie alle bieten kostenlose Testversionen an.
Compuware DevPartner (auch bekannt als BoundsChecker) in Contrast benötigt eine verlangsamte Neukompilierung der "Instrumentierung", und die Anwendung wird auch langsamer ausgeführt, wenn nach Fehlern gesucht wird. Und BoundsChecker kann überhaupt nicht mit 64-Bit-Versionen arbeiten. Wir haben dieses Tool aufgegeben.
quelle
Das beste Tool, das ich jemals verwendet habe, ist DevPartner BoundsChecker - es ist nicht kostenlos, hat aber einen Testzeitraum .
quelle
Ein weiteres Speicherwerkzeug für Ihre Liste: Memory Validator .
Nicht kostenlos, aber bei weitem nicht so teuer wie Purify oder Boundschecker.
quelle
Wenn Sie keine Angst vor Mingw haben, finden Sie hier einige Links (einige funktionieren möglicherweise mit MSVC) ... http://betterlogic.com/roger/?p=1140
quelle
Wir führen gerade ein Tool zur Überprüfung der Speichersicherheit für Windows durch, das GCC und Micrsoft Visual C (noch nicht C ++) unterstützt, und suchen nach Betatestern.
EDIT 12. Juni 2011: Nicht mehr Beta, jetzt Produktion für GCC und Microsoft Visual Studio C.
quelle
Ich habe dieses SF-Projekt heute gefunden:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Sie portieren valgrind nach Windows. Wahrscheinlich werden wir in einigen Jahren einen zuverlässigen Valgrind an Fenstern haben.
quelle
Schauen Sie sich diese Frage an: Gibt es einen guten Valgrind-Ersatz für Windows? . Obwohl ein allgemeiner Ersatz für Valgrind gefragt wird, werden hauptsächlich Speicherleckdetektoren und nicht die Erkennung von Rennbedingungen erörtert.
quelle
Ich habe Insure ++ verwendet, das hervorragende Arbeit bei der Suche nach C ++ - Speicherlecks / -verfälschungen und vielen anderen Fehlern wie nicht initialisierten Variablen, Zeigerfehlern, Zeichenfolgen usw. leistet. Es bietet auch visuelle "Codeabdeckung" und Laufzeitspeichernutzung usw., die mehr Sicherheit bieten Ihr Code .. Sie können es für die Trail-Version versuchen ..
quelle
Vielleicht möchten Sie lesen, was Mozilla in Bezug auf Speicherlecks tut . Ein Werkzeug in ihrer Toolbox ist der Müllsammler von Hans Boehm, der als Speicherlecksucher verwendet wird.
quelle
Sie können die RuntimeChecker- Testversion oder die IBM Purify- Testversion ausprobieren .
Eine kostenlose Lösung wäre die Verwendung des folgenden Codes in Visual Studio:
Schreiben Sie dies einfach oben in alle Ihre CPP-Dateien. Dadurch werden Speicherlecks Ihrer Anwendung erkannt, wenn der Debug-Lauf gestoppt wird, und im Ausgabefenster aufgelistet. Durch Doppelklicken auf eine Zeile mit Speicherlecks wird die Zeile hervorgehoben, in der Speicher zugewiesen und nie freigegeben wird. Dies kann Ihnen helfen: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml
quelle