J'étais à la recherche de Valgrind pour améliorer mon codage/débogage C lorsque j'ai découvert que c'était uniquement pour Linux - je n'ai aucun besoin ni aucun intérêt de migrer mon système d'exploitation vers Linux, alors je me demandais s'il existait un programme aussi performant pour Windows.
Quelques autres bons outils commerciaux:
Comme l'a souligné jakobengblom2, Valgrind dispose d'une panoplie d'outils. En fonction de celui dont vous parlez, il existe différentes parties de compteur Windows. Je ne mentionnerai que les logiciels libres ou OSS ici.
1. MemCheck:
Dr. Memory. C'est un outil relativement nouveau qui fonctionne très bien sous Windows 7. Ma fonctionnalité préférée est de regrouper les mêmes piles d'allocation 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é plutôt utile et facile à installer. Cela fonctionne de Win2000 à Win7.
AppVerifier est un outil indispensable pour les développeurs de code natif de Windows. Son vérificateur de "mémoire" effectue un travail similaire http://msdn.Microsoft.com/en-us/library/dd371695%28v=vs.85 % 29.aspx
2. Callgrind:
Mon préféré est verysleepy ( http://www.codersnotes.com/sleepy ) Il est minuscule mais très utile et facile à utiliser.
Si vous avez besoin de plus de fonctionnalités, AMD CodeAnalyst ™ Performance Analyzer est gratuit: http://developer.AMD.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Les outils d'analyse de performance Windows sont gratuits chez Microsoft. Ils ne sont pas très faciles à utiliser, mais vous pouvez faire le travail si vous êtes prêt à dépenser votre temps. http://blogs.Microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Télécharger: http://msdn.Microsoft.com/en-us/performance/cc752957
3. Massif:
Les outils gratuits similaires (pas tout à fait exact) sur Windows sont:
VMMap de sysinternals: http://technet.Microsoft.com/en-us/sysinternals/dd535533
! Commande de tas 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 de cache L2, mais ils ne sont pas aussi bons et faciles à utiliser que Cachegrind.
5. DRD:
N'ayant encore rien trouvé de gratuit et de puissant sur Windows, le seul outil gratuit pour les fenêtres légèrement plus proche que je puisse trouver est le vérificateur de verrouillage dans AppVerifier: http://msdn.Microsoft. com/fr-fr/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 cette information pour rechercher des erreurs de mémoire dans la version Windows; voir build.chromium.org, 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 le détecteur de fuite visuel . Lorsque je l'ai utilisé, il a détecté une fuite de mémoire à partir d'un appel new
et a renvoyé la ligne réelle 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 détecter et isoler les fuites de mémoire dans vos programmes
je voudrais énumérer un outil, j'espère que cela sera utile
lisez ceci article pour plus de détails
Essayez DUMA
Il existe une partie Pageheap.exe des outils de débogage pour Windows. C'est gratuit et est fondamentalement un allocateur/désallocateur de mémoire personnalisé.
En combinaison avec Visual Studio, j'utilise généralement Détecteur de fuite visuelle ou simplement _CrtDumpMemoryLeaks (), qui est un appel à l'API Win32. Les deux n'ont rien d'extraordinaire 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 chère pourrait être GlowCode , je viens de travailler avec une version 5.x et, malgré quelques problèmes d’attachement à un processus dont j’avais besoin pour déboguer, cela fonctionnait assez bien.
J'ai adoré Validateur de mémoire , d'une société appelée Software Verification.
Viusual Studio peut vous aider à détecter les fuites de mémoire. Consultez la section Conseils et astuces Microsoft Visual C++ -> "Fuites de mémoire". Voir aussi ceci post in SO
Bien que le traçage réel ne soit possible qu’avec Team Edition de Visual Studio.
Voir le lien " Outils de test source " sur la page Ressources de test logiciel d'assurance qualité et d'outils de test pour obtenir une liste d'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 pouvez émuler divers chipsets Intel et cela vous donnerait des conseils sur la façon d'optimiser cette plate-forme.
Le détecteur de fuite de mémoire de Jochen Kalmbach est-il admissible?
PS: l'URL de la dernière version est enterré quelque part dans le fil de commentaire de l'article.
Essayez le produit Intel Inspector XE qui peut vous aider à détecter les problèmes de mémoire et de threads: http://software.intel.com/en-us/articles/intel-inspector-xe/
Que diriez-vous du Purify ?
La bibliothèque Boost Test peut détecter les fuites de mémoire.
LeakDiag, UMDH, le vérificateur d’applications, DebugDiag, sont des outils utiles pour améliorer la robustesse du code et rechercher les fuites de mémoire.
Nous sommes en train de terminer 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: Plus de la bêta, maintenant la production pour GCC et Microsoft Visual Studio C.
Si vous développez avec Borland/CodeGear/Embarcadero C++ Builder, vous pouvez utiliser CodeGuard.
J'ai trouvé ce projet SF aujourd'hui:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Ils portent valgrind sous Windows. Probablement, dans plusieurs années, nous aurons un valgrind fiable sur les fenêtres.
Un autre outil de mémoire pour votre liste: Memory Validator .
Pas gratuit, mais loin d'être aussi cher que Purify ou Boundschecker.
Peut-être que vous êtes après CodeSnitch? http://www.entrek.com/codesnitch.html
Le meilleur outil que j'ai jamais utilisé est DevPartner BoundsChecker - ce n'est pas gratuit, mais il a une période d'évaluation.
Presque tous les profilers incluent la recherche de fuites de mémoire et vous indiquent la pile lorsque la mémoire a été allouée.
Je peux recommander Intels Parallel Inspector . Simple à utiliser et aucune recompilation nécessaire. La version d'essai dure 30 jours.
GlowCode et AtromatedQA incluent également de telles capacités. Ils offrent tous des essais gratuits.
Compuware DevPartner (aussi appelé BoundsChecker) dans Contrast nécessite une recompilation "d'instrumentation" ralentie et l'application s'exécute également plus lentement lors de la recherche d'erreurs. Et BoundsChecker ne peut pas du tout fonctionner avec les évaluations 64 bits. Nous avons abandonné cet outil.
Si vous n'avez pas peur de Mingw, voici quelques liens (certains pourraient fonctionner avec MSVC) ... http://betterlogic.com/roger/?p=114
Vous pouvez consulter l'article Conception et mise en oeuvre d'un profileur de mémoire dans le je dans le livre "Game Programming Gems 8".
Il montre comment mettre en œuvre un profileur de mémoire en temps réel semi-intrusif à faible surcharge, code source fourni sur le CD-ROM.
L'utilitaire de vidage de mémoire en mode utilisateur (UMDH) fonctionne avec le système d'exploitation pour analyser les allocations de segment de mémoire Windows pour un processus spécifique. C'est un très bon outil gratuit de Microsoft. Ici est un mini tutoriel "Comment utiliser Umdh.exe pour trouver des fuites de mémoire".
L'outil gratuit DebugDiag vous aidera à trouver de la mémoire et à gérer les fuites.
Vous n'avez pas besoin d'augumenter votre programme pour que DebugDiag fonctionne.
Bien que ce ne soit pas le programme le plus facile ou le plus intuitif à utiliser! Assurez-vous que vous recherchez des tutoriels et des instructions sur l'utilisation de Google.
Consultez cette question: Existe-t-il un bon substitut Valgrind pour Windows? . Bien que le substitut général à valgrind soit demandé, il aborde principalement les détecteurs de fuite de mémoire et non les détections de conditions de course.
Absolument Purifier! Je me suis servi de cela pour analyser des bases de code volumineuses (> 3 000 kSLOC) et je l’ai trouvé excellent.
Vous voudrez peut-être consulter cette liste sur Wikipedia.
En passant, j'ai trouvé memwatch utile. Merci Johan!
Vous pouvez essayer RuntimeChecker version d'évaluation IBM Purify version d'évaluation ..
Une solution gratuite consisterait à utiliser le code suivant dans Visual Studio:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Il suffit d'écrire ceci dans la partie supérieure de tous vos fichiers cpp. Cela détectera les fuites de mémoire de votre application lors de l’arrêt du débogage et les listera dans la fenêtre de sortie. Un double-clic sur une ligne de fuite de mémoire vous indique la ligne où la mémoire est allouée et jamais libérée. Cela peut vous aider: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml
Clang prend en charge le plug-in Address Sanitizer (option -faddress-sanitizer), qui peut détecter la plupart des bogues détectés par Valgrind (ne prend pas encore en charge la détection des lectures de mémoire non initialisées et des fuites de mémoire). Voir cette page pour une comparaison avec Valgrind et d’autres outils similaires. Un port Windows officiel est actuellement en cours, voir port Windows ASan .
J'ai essayé de le construire moi-même sous Windows il y a quelques mois et j'ai abandonné, voir mon article lié question . Les choses ont peut-être changé pour le mieux maintenant si vous voulez tenter votre chance.
J'ai utilisé Insure ++, qui fait un excellent travail en recherchant les fuites/corruptions de mémoire c ++ et de nombreux autres bugs tels que les variables non initialisées, les erreurs de pointeur, les chaînes, etc. votre code .. Vous pouvez l'essayer pour la version trail ..
Vous voudrez peut-être lire ce que Mozilla fait concernant les fuites de mémoire. L'un des outils dans leur boîte à outils est le ramasse-miettes Hans Boehm utilisé comme détecteur de fuite de mémoire.
Juste une idée, vous pouvez également implémenter un allocateur de mémoire et suivre tous les appels vers malloc et free. Cependant, cela pourrait être trop pour certains projets.
Parasoft Insure ++ a toujours été fiable: