GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Leichtes Debuggen von Speicherlecks unter Linux

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


Linux
  1. Linux-Speichernutzung

  2. Linux – Echte Speichernutzung?

  3. Linux – Soll ich 32 oder 64 Bit installieren?

  4. Inaktiver Linux-Speicher

  5. Den Speicher eines Linux-Prozesses in eine Datei ausgeben

Pekwm:Ein leichter Linux-Desktop

So löschen Sie den Auslagerungsspeicher unter Linux

5 Leichte Linux-Desktop-Umgebungen

kostenlose Befehlsbeispiele in Linux

Soll ich Linux Server oder Windows wählen?

Linux-Speichersegmentierung