Me gustaría anunciar mi recién anunciada utilidad heaptrack, que debería ser justo lo que estaba buscando en ese momento. Puede encontrar más información aquí:http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux
En comparación con su herramienta heapwatch, el rendimiento debería ser mucho mejor, ya que utilizo libunwind y luego libbacktrace para retrasar la anotación del backtrace con información de depuración DWARF.
Me encantaría recibir más comentarios al respecto, ¡así que pruébalo!
memleax debería funcionar para usted.
Depura la fuga de memoria de un proceso en ejecución al adjuntarlo, sin volver a compilar el programa ni reiniciar el proceso de destino. Es muy conveniente y adecuado para el entorno de producción.
Trampa solo para llamadas malloc/free(), por lo que debería tener un impacto menor en el rendimiento que Vagrild.
Funciona en GNU/Linux-x86_64 y FreeBSD-amd64.
NOTA:Soy el autor, cualquier sugerencia es bienvenida
GNU libc tiene una función de depuración malloc:
http://www.gnu.org/software/libc/manual/html_node/Allocation-Debugging.html
Usa LD_PRELOAD para llamar a mtrace()
de su propio .so:
#include <mcheck.h>
static void prepare(void) __attribute__((constructor));
static void prepare(void)
{
mtrace();
}
Compílelo con:
gcc -shared -fPIC dbg.c -o dbg.so
Ejecútelo con:
export MALLOC_TRACE=out.txt
LD_PRELOAD=./dbg.so ./my-leaky-program
Luego inspeccione el archivo de salida:
mtrace ./my-leaky-program out.txt
Y obtendrás algo como:
Memory not freed:
-----------------
Address Size Caller
0x0000000001bda460 0x96 at /tmp/test/src/test.c:7
Por supuesto, siéntete libre de escribir tus propios ganchos malloc que descarguen toda la pila (llamando a backtrace() si crees que eso va a ayudar).
Los números de línea y/o los nombres de las funciones se podrán obtener si mantuvo la información de depuración para el binario en algún lugar (por ejemplo, el binario tiene información de depuración integrada, o si hizo objcopy --only-keep-debug my-leaky-program my-leaky-program.debug
).
Además, puede probar el GC de Boehm, también funciona como detector de fugas:
http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html