GNU/Linux >> Tutoriels Linux >  >> Linux

Débogage léger des fuites de mémoire sous Linux

Je voudrais faire de la publicité pour mon utilitaire heaptrack qui vient d'être annoncé, qui devrait être exactement ce que vous recherchiez à l'époque. Vous pouvez trouver plus d'informations ici :http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux

Par rapport à votre outil heapwatch, les performances devraient être bien meilleures, car j'utilise libunwind et plus tard libbacktrace pour retarder l'annotation de la trace avec les informations de débogage DWARF.

J'aimerais avoir plus de commentaires à ce sujet, alors essayez-le !


memleax devrait fonctionner pour vous.

Il débogue la fuite de mémoire d'un processus en cours d'exécution en l'attachant, sans recompiler le programme ni redémarrer le processus cible. C'est très pratique et adapté à l'environnement de production.

Il n'intercepte que pour les appels malloc/free(), il devrait donc avoir moins d'impact sur les performances que Vagrild.

Il fonctionne sur GNU/Linux-x86_64 et FreeBSD-amd64.

REMARQUE :Je suis l'auteur, toute suggestion est la bienvenue


GNU libc a un débogage malloc intégré :

http://www.gnu.org/software/libc/manual/html_node/Allocation-Debugging.html

Utilisez LD_PRELOAD pour appeler mtrace() de votre propre .so :

#include <mcheck.h>
static void prepare(void) __attribute__((constructor));
static void prepare(void)
{
    mtrace();
}

Compilez-le avec :

gcc -shared -fPIC dbg.c -o dbg.so

Exécutez-le avec :

export MALLOC_TRACE=out.txt
LD_PRELOAD=./dbg.so ./my-leaky-program

Inspectez ultérieurement le fichier de sortie :

mtrace ./my-leaky-program out.txt

Et vous obtiendrez quelque chose comme :

Memory not freed:
-----------------
           Address     Size     Caller
0x0000000001bda460     0x96  at /tmp/test/src/test.c:7

Bien sûr, n'hésitez pas à écrire vos propres crochets malloc qui vident la pile entière (en appelant backtrace() si vous pensez que cela va vous aider).

Les numéros de lignes et/ou les noms de fonctions pourront être obtenus si vous avez conservé les informations de débogage pour le binaire quelque part (par exemple, le binaire a des informations de débogage intégrées, ou vous avez fait objcopy --only-keep-debug my-leaky-program my-leaky-program.debug ).

Aussi, vous pouvez essayer le GC de Boehm, il fonctionne aussi comme détecteur de fuite :

http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html


Linux
  1. Utilisation de la mémoire Linux

  2. Linux - Dois-je installer 32 ou 64 bits ?

  3. Linux Out-of-Memory Killer

  4. Version Kali Linux 2018.1

  5. Linux peut-il nettoyer la mémoire ?

Pekwm :un bureau Linux léger

Comment effacer la mémoire d'échange sous Linux

5 environnements de bureau Linux légers

exemples de commandes gratuits sous Linux

Dois-je choisir Linux Server ou Windows ?

Segmentation de la mémoire Linux