Existe-t-il un bon substitut Valgrind pour Windows?

Je cherchais dans Valgrind pour améliorer mon codage / débogage de C lorsque j’ai découvert que ce n’était que pour Linux – je n’ai aucun autre besoin ou intérêt de déplacer mon système d’exploitation vers Linux.

Quelques bons outils commerciaux:

  • Purifier
  • Assurer ++

Comme l’a souligné jakobengblom2, valgrind dispose d’un ensemble d’outils. Selon celui dont vous parlez, il existe différentes pièces de comptoir de fenêtres. Je ne mentionnerai que des logiciels libres ou des outils gratuits ici.

1. MemCheck:

Dr. Memory. C’est un outil relativement nouveau, qui fonctionne très bien sur Windows 7. Ma fonctionnalité préférée est de regrouper les mêmes stacks d’allocation de fuites dans le rapport.

http://code.google.com/p/drmemory/

J’ai également utilisé UMDH ( http://support.microsoft.com/kb/268343 ) et je l’ai trouvé très utile et facile à configurer. Cela fonctionne de Win2000 à Win7.

AppVerifier est un must swissknife pour les développeurs de code natif Windows, son vérificateur “mémoire” fait un travail similaire http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Mon préféré est très sale ( http://www.codersnotes.com/sleepy ) Il est minuscule mais très utile et facile à utiliser.

Si vous avez besoin de plus de fonctionnalités, l’parsingur de performances AMD CodeAnalyst ™ est gratuit: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Les outils Windows Performance Analysis sont gratuits auprès de Microsoft, pas très faciles à utiliser, mais peuvent vous aider si vous souhaitez passer du temps. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Télécharger: http://msdn.microsoft.com/fr-fr/performance / cc752957

3. Massif:

Des outils gratuits similaires (pas tout à fait exacts) sur Windows sont:

VMMap from sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533

! heap commande dans windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind:

Les outils de performance Windows mentionnés ci-dessus ont un certain niveau de capacité de profilage des antémémoires L2, mais pas aussi bons et faciles à utiliser que Cachegrind.

5. DRD:

Je n’ai rien trouvé de gratuit et aussi puissant sur Windows, le seul outil gratuit pour Windows que je puisse trouver qui soit légèrement proche est le vérificateur “lock” dans AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx

Pourquoi ne pas utiliser Valgrind + Wine pour déboguer votre application Windows? Voir http://wiki.winehq.org/Wine_and_Valgrind

(Chromium utilise ceci pour vérifier la version de Windows pour les erreurs de mémoire; consultez build.chromium.org et regardez les cascades expérimentales ou de mémoire, et recherchez le vin.)

Il y a aussi Dr. Memory, voir dynamorio.org/drmemory.html

Pour Visual C ++, essayez Visual Leak Detector . Lorsque je l’ai utilisé, il a détecté une fuite de mémoire suite à un new appel et a renvoyé la ligne dans le code source de la fuite. La dernière version est disponible sur http://vld.codeplex.com/ .

L’environnement de développement pour Windows que vous utilisez peut contenir ses propres outils. Visual Studio, par exemple, vous permet de détecter et d’isoler les memory leaks dans vos programmes.

je voudrais énumérer un outil, l’espoir sera utile

Lisez cet article pour plus de détails

  1. Purifier
  2. Vérificateur de limites
  3. Coverity (fondamentalement c’est un parsingur de code mais, il va attraper une fuite de mémoire en statique)
  4. Code Glow
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Assurer ++

Essayez DUMA

Il existe une partie Pageheap.exe des outils de débogage pour Windows. C’est gratuit et est fondamentalement un allocateur / libérateur de mémoire personnalisé.

Voir http://support.microsoft.com/kb/286470

En combinaison avec Visual Studio, j’utilise généralement Visual Leak Detector ou simplement _CrtDumpMemoryLeaks (), qui est un appel win32 api. Les deux ne sont rien de compliqué mais ils font le travail.

J’ai eu la chance d’utiliser Compuware DevPartner Studio dans le passé et c’était vraiment bien, mais c’est assez cher. Une solution moins coûteuse pourrait être GlowCode , je viens de travailler avec une version 5.x et, malgré quelques problèmes d’attachement à un processus que je devais déboguer, cela fonctionnait très bien.

J’aimais Memory Validator , une entreprise appelée Software Verification.

Viusual Studio peut vous aider à détecter les memory leaks. Voir Conseils et astuces Microsoft Visual C ++ -> Section “Fuites de mémoire”. Voir aussi ce post dans SO

Bien que le traçage réel ne soit possible qu’avec Team Edtion de Visual Studio.

Reportez-vous au lien ” Outils de test de la source ” de la page Test du logiciel QA et des ressources de l’outil de test pour obtenir la liste des outils similaires.

J’ai déjà utilisé BoundsChecker, DevPartner Studio et Intel V-Tune pour le profilage. J’ai aimé V-Tune le meilleur; vous pourriez émuler différents chipsets Intel et vous donner des conseils sur la façon d’optimiser pour cette plate-forme.

Le détecteur de fuite de mémoire de Jochen Kalmbach est-il qualifié?

PS: l’URL de la dernière version est enterrée quelque part dans le fil de commentaires de l’article.

LeakDiag, UMDH, App Verifier, DebugDiag sont tous des outils utiles pour améliorer la robustesse du code et détecter les memory leaks.

La bibliothèque Boost Test peut détecter les memory leaks.

Que diriez-vous du Purify ?

Essayez le produit Inspector XE d’Intel qui peut vous aider à détecter les problèmes de mémoire et de threading: http://software.intel.com/en-us/articles/intel-inspector-xe/

Peut-être que CodeSnitch serait quelque chose que vous recherchez? http://www.entrek.com/codesnitch.html

Si vous développez avec Borland / CodeGear / Embarcadero C ++ Builder, vous pouvez utiliser CodeGuard.

Plus ou moins tous les profileurs incluent la vérification des memory leaks et vous montrent la stack lorsque la mémoire a été allouée.

Je peux recommander l’ Inspels Parallel Inspector . Simple à utiliser et aucune recompilation nécessaire. La version d’évaluation dure 30 jours.

GlowCode et AtromatedQA incluent également de telles capacités. Ils offrent tous des essais gratuits.

Compuware DevPartner (aka BoundsChecker) dans Contrast nécessite une recompilation de l’instrumentation ralentie et l’application s’exécute également plus lentement lors de la vérification des erreurs. Et BoundsChecker ne peut pas fonctionner avec les options 64 bits. Nous avons abandonné cet outil.

Le meilleur outil que j’ai jamais utilisé est DevPartner BoundsChecker – ce n’est pas gratuit, mais il a une période d’évaluation.

Un autre outil de mémoire pour votre liste: Validateur de mémoire .

Pas gratuit, mais loin d’être aussi cher que Purify ou Boundschecker.

Si vous n’avez pas peur de mingw, voici quelques liens (certains pourraient fonctionner avec MSVC) … http://betterlogic.com/roger/?p=1140

Nous venons de compléter un outil de vérification de la sécurité de la mémoire pour Windows, qui gère GCC et Micrsoft Visual C (pas encore C ++), et nous recherchons des testeurs bêta.

EDIT 12 juin 2011: Non plus Beta, maintenant production pour GCC et Microsoft Visual Studio C.

J’ai trouvé ce projet SF aujourd’hui:

http://sourceforge.net/p/valgrind4win/wiki/Home/

Ils portent valgrind sur Windows. Probablement dans plusieurs années, nous aurons un système fiable sur les fenêtres.

Consultez cette question: existe-t-il un bon substitut Valgrind pour Windows? . Bien que le substitut général à valgrind soit demandé, il traite principalement des détecteurs de fuite de mémoire et non des détections de conditions de course.

J’ai utilisé Insure ++ qui fait un excellent travail pour trouver des fuites / corruptions de mémoire c ++ et de nombreux autres bogues comme les variables non initialisées, les erreurs de pointeur, les chaînes, etc. votre code .. Vous pouvez l’essayer pour la version trail ..

Vous pourriez vouloir lire ce que fait Mozilla concernant les memory leaks. Un outil dans leur boîte à outils est le ramasse-miettes Hans Boehm utilisé comme détecteur de fuite de mémoire.

Vous pouvez essayer la version d’ évaluation de RuntimeChecker pour tester IBM Purify .

Une solution gratuite serait d’utiliser le code suivant dans Visual Studio:

 #ifdef _DEBUG #define new DEBUG_NEW #endif 

Il suffit d’écrire ceci en haut de tous vos fichiers cpp. Cela détectera les memory leaks de votre application en arrêtant l’exécution du débogage et les répertoriera dans la fenêtre de sortie. Double-cliquer sur une ligne de fuite de mémoire vous indiquera la ligne où la mémoire est allouée et ne sera jamais libérée. Cela peut vous aider: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml