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