Détecteurs de fuite de mémoire pour C?

Avec quels détecteurs de fuite de mémoire les gens ont-ils eu une bonne expérience?

Voici un résumé des réponses à ce jour:

Valgrind – Cadre d’instrumentation pour la construction d’outils d’parsing dynamic.

Elecsortingc Fence – Un outil qui fonctionne avec GDB

Attelle – Vérification statique statique assistée par annotation

Glow Code – Il s’agit d’un profileur de performances et de mémoire complet en temps réel pour les programmeurs Windows et .NET qui développent des applications avec C ++, C # ou tout .NET Framework.

Voir aussi ce post stackoverflow .

    deuxièmement, le valgrind … et je vais append une clôture élecsortingque .

    Valgrind sous Linux est assez bon; Je n’ai aucune expérience sous Windows avec cela.

    Si vous avez de l’argent: IBM Rational Purify est un détecteur de corruption de mémoire et de fuite de mémoire extrêmement puissant destiné au secteur C / C ++. Existe pour Windows, Solaris et Linux. Si vous êtes uniquement Linux et que vous voulez une solution bon marché, optez pour Valgrind.

    Bavette pour gcc! Il comstack réellement les vérifications dans l’exécutable. Il suffit d’append

    -fmudflap -lmudflap 

    à vos drapeaux gcc.

    charpie (outil open source très similaire appelé attelle )

    Si vous utilisez Linux, glibc vaut également la peine d’être utilisé: le code heap de débogage intégré. Pour l’utiliser, créez un lien avec -lmcheck ou définissez (et exportez) la variable d’environnement MALLOC_CHECK_ avec la valeur 1, 2 ou 3. Le manuel glibc fournit plus d’informations.

    Ce mode est particulièrement utile pour détecter les doubles libérations, et il trouve souvent des écritures en dehors de la zone mémoire allouée lors d’une librairie. Je ne pense pas qu’il signale une fuite de mémoire.

    J’ai eu quelques succès avec cppcheck , qui ne fait que de l’parsing statique. Il est open source et possède une interface en ligne de commande (je ne l’ai pas utilisé de toute autre manière).

    Douloureux mais si vous deviez en utiliser un ..
    Je recommanderais la suite DevPartner BoundsChecker … c’est ce que les gens de mon lieu de travail utilisent à cette fin. Payé n propriétaire .. pas de freeware.

    J’ai eu un amour minimal pour tous les détecteurs de fuite de mémoire. En règle générale, il y a beaucoup trop de faux positifs pour qu’ils soient utiles. Je recommanderais ces deux comme étant les moins intrusifs:

    GlowCode

    Tas de débogage

    Pour le débogage Win32 des memory leaks, j’ai eu de très bonnes expériences avec l’ancien tas de débogage CRT, qui vient comme une librairie avec Visual C.

    Dans une construction Debug, malloc (et al) est redéfini en tant que _malloc_dbg (et al) et il existe d’autres appels pour récupérer les résultats, qui sont tous indéfinis si _DEBUG n’est pas défini. Il installe toutes sortes de gardes-frontières sur le tas et vous permet d’afficher les résultats à tout moment.

    J’avais quelques faux positifs lorsque je créais des routines de temps qui dérangeaient les allocations d’exécution de la bibliothèque jusqu’à la découverte de _CRT_BLOCK.

    Je devais d’abord produire le DOS, puis la console Win32 et des services qui allaient fonctionner à jamais. Autant que je sache, il n’y a pas de fuite de mémoire, et dans au moins un endroit, le code a fonctionné sans surveillance pendant deux ans avant que le moniteur sur le PC ne tombe en panne (bien que le PC aille bien!).

    Sous Windows, j’ai utilisé le détecteur de fuite visuel . S’intègre à VC ++, facile à utiliser (il suffit d’inclure un en-tête et de définir LIB pour trouver la lib), open source, libre d’utiliser FTW.

    À l’université, lorsque je faisais la plupart des choses sous Unix Solaris, j’utilisais gdb .

    Cependant, j’irais avec valgrind sous Linux.

    Le grand-père de ces outils est l’outil commercial Purify à source fermée qui a été vendu à IBM, puis à UNICOM.

    Les logiciels Insure ++ (instrumentation du code source) et valgrind (open source) de Parasoft sont les deux autres véritables concurrents.

    Anecdote: l’auteur original de Purify, Reed Hastings, a ensuite fondé NetFlix.

    Personne n’a mentionné le MSan de Clang , qui est assez puissant. Il n’est officiellement supporté que par Linux.

    Cette question est peut-être ancienne, mais j’y répondrai quand même. Peut-être que ma réponse aidera quelqu’un à retrouver ses memory leaks.

    Ceci est mon propre projet – je l’ai mis en code open source:

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

    Les plates-formes Windows 32 et 64 bits sont sockets en charge, ainsi que les stacks d’appels en mode mixte et natif.

    La récupération de place .NET n’est pas prise en charge. (Gcnew de C ++ cli ou nouveau de C #)

    C’est un outil performant qui ne nécessite aucune intégration (à moins que vous ne souhaitiez 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 il détecte réellement des fuites dans votre processus. Il attrape les memory leaks de tout le processus. Analysez uniquement les plus grosses fuites, pas toutes.

    Je seconderai Valgrind en tant qu’outil externe de gestion des memory leaks.
    Mais, pour la plupart des problèmes que j’ai eu à résoudre, j’ai toujours utilisé des outils internes. Parfois, les outils externes ont une surcharge ou sont trop compliqués à mettre en place.

    Pourquoi utiliser du code déjà écrit quand vous pouvez écrire le vôtre 🙂

    Je plaisante, mais parfois vous avez besoin de quelque chose de simple et c’est plus rapide de l’écrire vous-même. En général, je remplace simplement les appels à malloc () et free () par des fonctions permettant de mieux savoir qui atsortingbue quoi. La plupart de mes problèmes semblent être une personne oubliée de libérer et cela aide à résoudre ce problème.

    Cela dépend vraiment de l’endroit où se trouve la fuite et si vous le saviez, vous n’auriez pas besoin d’outils. Mais si vous avez une idée de l’endroit où vous croyez que cela fuit, installez votre propre instrumentation et voyez si cela vous aide.

    Notre outil CheckPointer peut le faire pour GNU C 3/4, les dialectes C du MS et GreenHills C. Il peut détecter des problèmes de gestion de la mémoire que Valgrind ne peut pas.

    Si votre code fuit simplement, à la sortie, CheckPointer vous indiquera où toute la mémoire non libérée a été allouée.