Ich möchte mein gerade angekündigtes Heaptrack-Dienstprogramm bewerben, das genau das sein sollte, wonach Sie damals gesucht haben. Weitere Informationen finden Sie hier:http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux
Im Vergleich zu Ihrem Heapwatch-Tool sollte die Leistung viel besser sein, da ich libunwind und später libbacktrace verwende, um die Annotation des Backtrace mit DWARF-Debug-Informationen zu verzögern.
Ich würde gerne mehr Feedback dazu bekommen, also probiere es aus!
memlax sollte für Sie funktionieren.
Es debuggt Speicherlecks eines laufenden Prozesses, indem es angehängt wird, ohne das Programm neu zu kompilieren oder den Zielprozess neu zu starten. Es ist sehr praktisch und für Produktionsumgebungen geeignet.
Es TRAPt nur für Aufrufe von malloc/free(), also sollte es weniger Leistungseinbußen bringen als Vagrild.
Es funktioniert unter GNU/Linux-x86_64 und FreeBSD-amd64.
HINWEIS:Ich bin der Autor, jeder Vorschlag ist willkommen
GNU libc hat eingebautes Malloc-Debugging:
http://www.gnu.org/software/libc/manual/html_node/Allocation-Debugging.html
Verwenden Sie LD_PRELOAD, um mtrace()
aufzurufen von Ihrem eigenen .so:
#include <mcheck.h>
static void prepare(void) __attribute__((constructor));
static void prepare(void)
{
mtrace();
}
Kompilieren Sie es mit:
gcc -shared -fPIC dbg.c -o dbg.so
Führen Sie es aus mit:
export MALLOC_TRACE=out.txt
LD_PRELOAD=./dbg.so ./my-leaky-program
Untersuchen Sie später die Ausgabedatei:
mtrace ./my-leaky-program out.txt
Und Sie erhalten so etwas wie:
Memory not freed:
-----------------
Address Size Caller
0x0000000001bda460 0x96 at /tmp/test/src/test.c:7
Natürlich können Sie gerne Ihre eigenen Malloc-Hooks schreiben, die den gesamten Stack ausgeben (durch Aufrufen von backtrace(), wenn Sie glauben, dass das hilft).
Zeilennummern und/oder Funktionsnamen sind verfügbar, wenn Sie Debug-Informationen für die Binärdatei irgendwo gespeichert haben (z. B. hat die Binärdatei einige Debug-Informationen eingebaut, oder Sie haben objcopy --only-keep-debug my-leaky-program my-leaky-program.debug
).
Sie können auch Boehms GC ausprobieren, es funktioniert auch als Lecksucher:
http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html