Question

Ce mémoire détecteurs de fuite d'avoir des gens qui avaient une bonne expérience avec?

Voici un résumé des réponses:

Valgrind - Instrumentation-cadre pour la construction des outils d'analyse dynamiques.

Clôture Électrique - Un outil qui fonctionne avec GDB

Attelle - Annotation Assistée Léger De La Vérification Statique

Lueur Code - C'est une complète en temps réel de la performance et de la mémoire profiler pour Windows et .NET programmeurs qui développent des applications avec C++, C#, ou tout .NET Framework

Voir aussi cette stackoverflow post.

Était-ce utile?

La solution

la deuxième valgrind...et je vais l'ajouter clôture électrique.

Autres conseils

Valgrind sous linux est d'assez bonne qualité;Je n'ai aucune expérience sous Windows avec cette.

Si vous avez l'argent: IBM Rational Purifier est un outil extrêmement puissant de l'industrie de la force de la mémoire de la fuite et de corruption de la mémoire du détecteur pour le C/C++.Il existe pour Windows, Solaris et Linux.Si vous êtes à linux et que vous voulez une solution bon marché, aller pour Valgrind.

Bavette pour gcc!Il fait compile les contrôles dans l'exécutable.Ajoutez simplement

-fmudflap -lmudflap

pour votre gcc drapeaux.

les peluches (très similaire outil open-source appelé attelle)

Également utile si vous êtes sur Linux, l'utilisation de la glibc est le débogage intégré de segment de code.Pour l'utiliser, lien avec -lmcheck ou définir (et l'exportation), la MALLOC_CHECK_ la variable d'environnement avec la valeur 1, 2 ou 3. La glibc manuel fournit plus d'informations.

Ce mode est le plus utile pour la détection de double-libère, et il se trouve souvent écrit à l'extérieur de la zone de mémoire allouée lorsque l'on fait un gratuit.Je ne pense pas qu'il signale une fuite de mémoire.

J'ai eu pas mal de succès avec cppcheck, qui ne l'analyse statique uniquement.Il est open source et dispose d'une interface de ligne de commande (je n'ai pas utiliser de toute autre façon).

Pénible, mais si vous deviez utiliser un..
Je recommanderais le DevPartner BoundsChecker suite..c'est ce que les gens sur mon lieu de travail à utiliser à cette fin.Payé n propriétaire..pas freeware.

J'ai avait un minimum d'amour pour la mémoire des détecteurs de fuite.Typiquement, il y a beaucoup trop de faux positifs pour eux d'être d'une quelconque utilité.Je recommande ces deux beiong la moins intrusive:

GlowCode

Debug tas

Pour Win32 débogage de fuites de mémoire, j'ai eu de très bonnes expériences avec le bon vieux CRT de Débogage Tas, qui vient comme une lib avec Visual C.

Dans une version de Débogage malloc (et al) obtenir redéfini comme _malloc_dbg (et al) et il y a d'autres appels pour récupérer les résultats, qui sont tous undefined si _DEBUG n'est pas définie.Il met en place toutes sortes de gardes-frontière sur le tas, et vous permet d'afficher les résultats à tout moment.

J'ai eu un peu de faux positifs lorsque j'avais écrit, où doivent figurer certaines routines de temps que foiré avec la bibliothèque de l'exécution des allocations jusqu'à ce que j'ai découvert _CRT_BLOCK.

J'ai eu à produire d'abord de DOS, puis Win32 console et des services qui irait à jamais.Autant que je sache, il n'y a pas de fuites de mémoire, et dans au moins un endroit du code d'une durée de deux ans sans surveillance avant que le moniteur sur le PC a échoué (si le PC était beau!).

Sur Windows, j'ai utilisé Visual Détecteur De Fuite.S'intègre avec VC++, facile à utiliser (il suffit d'inclure un en-tête et jeu de LIB pour trouver la lib), open source, libre d'utiliser FTW.

À l'université, quand je faisais la plupart des choses sous Unix Solaris, j'ai utilisé gdb.

Cependant je voudrais aller avec valgrind sous Linux.

L'ancêtre de ces outils est le commercial, closed-source Purifier l'outil, qui a été vendu à IBM, puis à UNICOM

Parasoft de l' Assurer++ (le code source de l'instrumentation) et valgrind (open source) sont les deux autres concurrents.

Trivia:l'auteur original de la Purifier, Reed Hastings, a trouvé NetFlix.

Personne n'a indiqué clang est MSan, qui est assez puissant.Il est officiellement supporté sur Linux, mais.

Cette question peut-être vieux, mais je vais y répondre de toute façon - peut-être que ma réponse va aider quelqu'un à trouver leurs fuites de mémoire.

C'est mon projet - je l'ai mis comme code source ouvert:

https://sourceforge.net/projects/diagnostic/

Windows 32 et 64 bits de plates-formes prises en charge, natif et en mode mixte piles d'appels sont pris en charge.

.NET de la collecte des ordures n'est pas pris en charge.(C++ cli du gcnew ou C#'s new)

C'outil haute performance, et de ne pas nécessiter l'intégration (sauf si vous voulez vraiment l'intégrer).

Manuel complet peut être trouvé ici:

http://diagnostic.sourceforge.net/index.html

N'ayez pas peur de la façon dont beaucoup en fait, elle détecte les fuites de votre processus.Il attrape les fuites de mémoire de tout le processus.Analyser uniquement les plus grandes fuites, pas tous.

Je vais deuxième, le valgrind comme un outil externe pour les fuites de mémoire.
Mais, pour la plupart des problèmes que j'ai eu à résoudre, j'ai toujours utilisé à l'interne construit des outils.Parfois, les outils externes ont trop généraux ou trop compliquée à mettre en place.

Pourquoi utiliser déjà écrit le code lorsque vous pouvez écrire votre propre :)

Je blague, mais parfois vous avez besoin de quelque chose de simple et il est plus rapide d'écrire vous-même.Habituellement, je viens de remplacer les appels à malloc() et free() avec des fonctions qui maintiennent mieux la trace de ce qui alloue de la ce.La plupart de mes problèmes semblent être quelqu'un a oublié de gratuit et cela permet de résoudre le problème.

Ça dépend vraiment de l'endroit où la fuite est, et si vous saviez que, alors vous n'auriez pas besoin d'outils.Mais si vous avez une certaine idée de l'endroit où vous pensez que c'est une fuite, puis mettez-les dans votre propre de l'instrumentation et de voir si cela vous aide.

Notre CheckPointer l'outil peut le faire pour GNU C 3/4 et, MME dialectes de C, et GreenHills C.Il peut trouver des problèmes de gestion de mémoire que Valgrind ne peut pas.

Si votre code simplement les fuites, à la sortie CheckPointer vais vous dire où tous les unfreed la mémoire a été allouée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top