Gibt es einen guten Valgrind-Ersatz für Windows?


210

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.


Welche Arten von Debugging möchten Sie durchführen? Valgrind ist ein ziemlich umfangreiches Toolset, und die folgenden Antworten zeigen in alle Richtungen. Mit Schwerpunkt auf Speicherverlust / Zuordnungs-Debugging.
Jakobengblom2

1
Vielleicht können Sie den Code auf einer virtuellen Linux-Maschine in Ihrem Windows testen, nur wenn Sie ihn überprüfen müssen. Sie können den Entwicklungsordner für die virtuelle und die nicht virtuelle Maschine freigeben. Das heißt, wenn der Code portabel genug ist.
Liran Orevi

Antworten:


29

Einige weitere gute kommerzielle Tools:


1
Purify: ehrwürdig, aber dennoch nützlich, wie die vielen Änderungen der Unternehmensverantwortung zeigen, die es überlebt hat!
Norman Ramsey

2
Es dauert ewig, bis Insure ++ Ihren Code instrumentiert und Ihren Code zur Laufzeit ausgeführt hat.
C Johnson

117

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


2
Es gibt auch Gperftools (früher Google PerfTools) . Es ist kein Valgrind-Ersatz (was wirklich ist), aber es hat ein neues Malloc, einen CPU-Profiler, einen Heap-Profiler und einen Checker. Sehenswert, da es unter Linux und Windows (inkl. Mingw) und anderen Unices unterstützt wird.
Alexr

30

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


3
Denn dann würden Sie keine Windows-App debuggen - Sie würden eine Linux-App debuggen.
John Dibling

33
Keine Notwendigkeit, in Wine neu zu kompilieren. Übertragen Sie einfach Ihre .exe und .pdb auf eine Linux-Box. Und Sie würden keine Linux-App debuggen. Sie debuggen Ihre genaue Windows-App.
Dan Kegel

2
Genau, es ist besser, das Original zu verwenden als einen lahmen Klon: D Love Valgrind.
Alternative

11
Nett! Unter Windows können Sie eine virtuelle Maschine unter Linux ausführen und Ihre Software im fast vm-Wein im valgrind vm ausführen. Bonuspunkte, wenn Windows von einem VM ausgeführt wird, auf dem Linux in einem Windows VM ausgeführt wird :)
Imbrondir

15

Versuchen Sie für Visual C ++ Visual Leak Detector . Als ich es benutzte, erkannte es einen Speicherverlust bei einem newAnruf und gab die tatsächliche Zeile im Quellcode des Lecks zurück. Die neueste Version finden Sie unter http://vld.codeplex.com/ .


Es scheint bei mir nicht zu funktionieren. Ich habe sogar versucht, ein einfaches Projekt zu erstellen, das im Grunde nichts anderes tat, als Speicher zuzuweisen und ihn nicht freizugeben. VLD hat es nicht erkannt. : - |
Synetech

@Synetech inc. Ich hatte das gleiche Problem in VS2010 ... Die Verwendung der neuesten Version von VLD löste mein Problem
relaxxx

14

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


6
Es ist von sehr geringem praktischem Nutzen. Es wird der Dateiname / die Leinenummer für beleidigende Zuordnungen protokolliert, aber es ist nur informativ, wenn Sie malloc direkt anrufen. Wenn Sie new / delete verwenden, wird new.h nicht hilfreich als "beleidigender" Code identifiziert.
user9665

3
Es funktioniert bei mir richtig und zeigt auf die richtige Linie, auch wenn Neu / Löschen verwendet wird.
Rodrigo

Aber funktioniert es, wenn eine Bibliotheksfunktion zugewiesen wird? ZB strdup.
Alex Budovski

1
Valdrind macht viel mehr als nur Speicherlecks. Ich verwende es hauptsächlich, um freigegebenen und nicht initialisierten Stapel- und Heapspeicher zu verwenden, der ansonsten unglaublich schwer zu debuggen sein kann.
ideasman42

1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) bietet einen vollständigen Callstack für jeden Speicherverlust mit minimalen Änderungen des Quellcodes. Überprüfen Sie Beispiel vor Ort
KindDragon

14

Ich möchte ein Tool auflisten, hoffe, dass es nützlich sein wird

Lesen Sie diesen Artikel für weitere Details

  1. Reinigen
  2. Bounds Checker
  3. Coverity (im Grunde ist es ein Code-Analysator, aber es fängt Speicherlecks in statischen)
  4. Glow Code
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. ++ versichern


12

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


Pageheap / gflags haben mir geholfen, einigen bösen Haufenkorruptionsproblemen auf den Grund zu gehen.
the_mandrill

Ich fand gflags+ gdb(von mingw) hilfreich bei der Diagnose.
Jarekczek

8

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.


6

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.


Teuer ja. Es hat sich an einem Wochenende ausgezahlt, nur mit dem Profiler-Stück.
EvilTeach



4

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.



3

LeakDiag, UMDH, App Verifier und DebugDiag sind nützliche Tools, um die Robustheit des Codes zu verbessern und Speicherlecks zu finden.


3

Die Boost-Test-Bibliothek kann Speicherlecks erkennen.





2

Wenn Sie mit Borland / CodeGear / Embarcadero C ++ Builder entwickeln, können Sie CodeGuard verwenden.


2

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.


2
Ich würde definitiv Glowcode empfehlen. Ich habe es in der Vergangenheit verwendet, um einen Speicherverlust in einer DLL zu finden, die von meiner App aufgerufen wird.
Bob

Bei der Verwendung von DevPartner an meinem letzten Arbeitsplatz gab es Beschwerden über erhebliche Verlangsamungen. Sie tun alles, um es nicht zu benutzen, weil es so langsam wäre.
Calyth




2

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.




1

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



1

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:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.