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


210

Je cherchais dans Valgrind pour aider à améliorer mon codage / débogage C lorsque j'ai découvert que c'était uniquement pour Linux - je n'ai aucun autre besoin ni intérêt de déplacer mon système d'exploitation vers Linux, donc je me demandais s'il existe un programme tout aussi bon pour Windows.


Quels types de débogage envisagez-vous de faire? Valgrind est un ensemble d'outils assez riche, et les réponses ci-dessous pointent dans toutes sortes de directions. Avec un accent sur le débogage de fuite / allocation de mémoire.
jakobengblom2

1
Vous pouvez peut-être tester le code sur une machine Linux virtuelle à l'intérieur de votre Windows, juste au moment où vous devez le vérifier. vous pouvez partager le dossier de développement entre la machine virtuelle et non virtuelle. c'est-à-dire si le code est suffisamment portable.
Liran Orevi

Réponses:


29

Quelques bons outils commerciaux:


1
Purifier: vénérable mais toujours utile, comme le montre le nombre de changements de propriété de l'entreprise qui ont survécu!
Norman Ramsey

2
Insure ++ prend une éternité pour instrumenter votre code et pour exécuter votre code à l'exécution.
C Johnson

117

Comme l'a souligné jakobengblom2, valgrind a une combinaison d'outils. En fonction de celui dont vous parlez, il existe différentes contre-fenêtres. Je ne mentionnerai ici que l'OSS ou les outils gratuits.

1. MemCheck:

Dr. Memory. Il s'agit d'un outil relativement nouveau qui fonctionne très bien sous Windows 7. Ma fonctionnalité préférée est qu'il regroupe les piles d'allocation des mêmes fuites dans le rapport.

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

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

AppVerifier est un incontournable de swissknife pour les développeurs de code natif Windows, son vérificateur de "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 endormi ( 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 des performances de Windows sont gratuits de Microsoft, pas très faciles à utiliser mais peuvent faire le travail si vous êtes prêt à 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/en-us/performance / cc752957

3. Massif:

Des outils gratuits similaires (pas tout à fait exacts) sur les fenêtres sont:

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

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

4. Cachegrind:

Les outils de performances Windows mentionnés ci-dessus ont un certain niveau de capacité de profilage des échecs de cache L2 mais pas aussi bon et facile à utiliser que Cachegrind.

5. DRD:

Je n'ai encore rien trouvé de gratuit et aussi puissant sur Windows, le seul outil gratuit pour Windows que je trouve légèrement proche est le vérificateur de "verrouillage" dans AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
Il existe également gperftools (anciennement Google PerfTools) . Ce n'est pas un remplacement valgrind (ce qui est vraiment) mais il a un nouveau malloc, un profileur de processeur, un profileur de tas et un vérificateur. Cela vaut le coup d'oeil car il est pris en charge sur Linux et Windows (y compris Mingw) et d'autres unités.
alexr

30

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

(Chromium l'utilise pour rechercher des erreurs de mémoire dans la version Windows; consultez build.chromium.org et examinez les cascades expérimentales ou de mémoire et recherchez wine.)

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


3
Parce que vous ne débogueriez pas une application Windows - vous débogueriez une application Linux.
John Dibling

33
Pas besoin de recompiler dans Wine. Transférez simplement vos fichiers .exe et .pdb vers une boîte Linux. Et vous ne débogueriez pas une application Linux; vous déboguez votre application Windows exacte.
Dan Kegel

2
Exactement, il vaut mieux utiliser la vraie chose qu'un clone boiteux: D Love valgrind.
alternative

11
Agréable! À partir de Windows, vous pouvez exécuter une machine virtuelle exécutant linux, exécutant votre logiciel dans le vin presque vm, dans le valgrind vm. Points bonus si windows est exécuté à partir d'un vm exécutant linux dans un vm windows :)
Imbrondir

15

Pour Visual C ++, essayez Visual Leak Detector . Lorsque je l'ai utilisé, il a détecté une fuite de mémoire lors d'un newappel et a renvoyé la ligne réelle dans le code source de la fuite. La dernière version peut être trouvée à http://vld.codeplex.com/ .


Cela ne semble pas fonctionner pour moi. J'ai même essayé de créer un projet simple qui ne faisait pratiquement rien d'autre que d'allouer de la mémoire et de ne pas la libérer. VLD ne l'a pas détecté. : - |
Synetech

@Synetech inc. J'ai eu le même problème dans VS2010 ... L'utilisation de la dernière version de VLD a résolu mon problème
relaxxx

14

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 fuites de mémoire dans vos programmes


6
Il est très peu utile en pratique. Il enregistrera le nom de fichier / numéro de lin pour les allocations incriminées, mais il n'est informatif que si vous appelez directement malloc. Lorsque vous utilisez new / delete, il identifiera inutilement new.h comme code "incriminé".
user9665

3
Cela fonctionne correctement pour moi, en pointant la ligne droite même les nouveaux / supprimer sont utilisés.
Rodrigo

Mais cela fonctionnera-t-il si une fonction de bibliothèque alloue? Par exemple strdup.
Alex Budovski

1
Valdrind fait beaucoup plus que les fuites de mémoire, je l'utilise principalement pour trouver l'utilisation de la mémoire de pile et de tas libérée et non initialisée qui peut être incroyablement difficile à déboguer autrement.
ideasman42

1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) fournit une pile d'appels complète pour chaque fuite de mémoire avec un minimum de modifications du code souce. Vérifiez l'exemple sur le site
KindDragon

14

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

lire cet article pour plus de détails

  1. Purifier
  2. Vérificateur de limites
  3. Coverity (fondamentalement, c'est un analyseur de code, mais il détectera les fuites de mémoire en statique)
  4. Code lumineux
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Assurer ++


12

Il existe une partie Pageheap.exe des outils de débogage pour Windows. C'est gratuit et c'est essentiellement un allocateur / désallocateur de mémoire personnalisé.

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


Pageheap / gflags m'a aidé à résoudre certains problèmes de corruption de tas désagréables.
the_mandrill

J'ai trouvé gflags+ gdb(de mingw) utile pour le diagnostic.
Jarekczek

8

En combinaison avec Visual Studio, j'utilise généralement Visual Leak Detector ou simplement _CrtDumpMemoryLeaks () qui est un appel api win32. Les deux n'ont rien d'extraordinaire mais ils font le travail.


6

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é certains problèmes de connexion à un processus dont j'avais besoin pour déboguer, cela fonctionnait assez bien.


Cher oui. Il a été remboursé en un week-end, en utilisant simplement le profileur.
EvilTeach



4

Voir le lien " Outils de test source " sur la page Test de contrôle qualité logiciel et ressources des outils de test pour une liste d'outils similaires.

J'ai utilisé BoundsChecker, DevPartner Studio et Intel V-Tune dans le passé pour le profilage. J'ai préféré V-Tune; vous pourriez émuler divers chipsets Intel et cela vous donnerait des conseils sur la façon d'optimiser pour cette plate-forme.



3

LeakDiag, UMDH, App Verifier, DebugDiag, sont tous des outils utiles pour améliorer la robustesse du code et trouver les fuites de mémoire.


3

La bibliothèque Boost Test peut détecter les fuites de mémoire.





2

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


2

Plus ou moins tous les Profileurs incluent la vérification des fuites de mémoire et vous montrent 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 (alias BoundsChecker) dans Contrast a besoin d'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 des évsrions 64 bits. Nous avons abandonné cet outil.


2
Je recommanderais sans aucun doute glowcode. Je l'ai utilisé dans le passé pour trouver une fuite de mémoire dans une DLL appelée par mon application.
Bob

Il y a eu des plaintes de ralentissements majeurs lors de l'utilisation de DevPartner sur mon dernier lieu de travail. Ils font tout pour éviter de l'utiliser en raison de sa lenteur.
Calyth







1

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



1

Vous pouvez essayer la version d'essai de RuntimeChecker ou la version d' essai d' IBM Purify .

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Écrivez simplement ceci en haut 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 répertoriera dans la fenêtre de sortie. Double-cliquez sur une ligne de fuites de mémoire pour mettre en évidence 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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.