La mémoire des détecteurs de fuite pour le C?
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
Aussi voir ce stackoverflow post.
Vous devez vous connecter pour publier un commentaire.
deuxième la valgrind... et je vais l'ajouter clôture électrique.
Valgrind sous linux est assez bonne; je n'ai aucune expérience sous Windows avec ce.
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. Juste ajouter
à votre gcc drapeaux.
lint (très similaire outil open-source appelé attelle)
Également intéressant de l'aide 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_ 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, ce qui ne l'analyse statique uniquement. Il est open source et dispose d'une interface de ligne de commande (je n'ai pas utilisé de toute autre manière).
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 Debug 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 ne dure jamais. Autant que je sache, il n'y a pas de fuites de mémoire, et dans au moins un endroit du code à exécuter pendant 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 j'était en train de faire 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 outil, qui a été vendu à IBM, puis à UNICOM
Parasoft de 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, ce 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 & plates-formes 64 bits sont pris 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 nouveau)
Il 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 outil peut faire pour GNU C 3/4 et, MME dialectes de C, et GreenHills C. On 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.