GNU/Linux >> Belajar Linux >  >> Linux

Debugging kebocoran memori ringan di linux

Saya ingin mengiklankan utilitas heaptrack saya yang baru saja diumumkan, yang seharusnya sesuai dengan yang Anda cari saat itu. Anda dapat menemukan informasi lebih lanjut di sini:http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux

Dibandingkan dengan alat jam tangan heap Anda, kinerjanya seharusnya jauh lebih baik, karena saya menggunakan libunwind dan libbacktrace yang lebih baru untuk menunda anotasi lacak balik dengan informasi debug DWARF.

Saya ingin mendapatkan lebih banyak masukan tentangnya, jadi cobalah!


memleax seharusnya bekerja untuk Anda.

Ini men-debug kebocoran memori dari proses yang berjalan dengan melampirkannya, tanpa mengkompilasi ulang program atau memulai kembali proses target. Sangat nyaman dan cocok untuk lingkungan produksi.

Itu TRAPs hanya untuk panggilan malloc/free(), jadi itu akan membawa dampak kinerja yang lebih sedikit daripada Vagrild.

Ini berfungsi di GNU/Linux-x86_64 dan FreeBSD-amd64.

CATATAN:Saya penulisnya, saran apa pun diterima


GNU libc memiliki debugging malloc bawaan:

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

Gunakan LD_PRELOAD untuk memanggil mtrace() dari .so Anda sendiri:

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

Kompilasi dengan:

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

Jalankan dengan:

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

Kemudian periksa file keluaran:

mtrace ./my-leaky-program out.txt

Dan Anda akan mendapatkan sesuatu seperti:

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

Tentu saja, jangan ragu untuk menulis kait malloc Anda sendiri yang membuang seluruh tumpukan (memanggil backtrace() jika menurut Anda itu akan membantu).

Nomor baris dan/atau nama fungsi akan dapat diperoleh jika Anda menyimpan info debug untuk biner di suatu tempat (mis. biner memiliki beberapa info debug bawaan, atau Anda melakukan objcopy --only-keep-debug my-leaky-program my-leaky-program.debug ).

Selain itu, Anda dapat mencoba GC Boehm, ini berfungsi sebagai pendeteksi kebocoran juga:

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


Linux
  1. Cara Menghapus Cache Memori di Linux

  2. Linux – Penggunaan Memori Nyata?

  3. Kali Linux 2018.1 Rilis

  1. Apakah alokasi memori di linux tidak memblokir?

  2. Bisakah Linux menggosok memori?

  3. Tersedia alternatif X11 yang ringan?

  1. Penggunaan Memori Linux

  2. Linux – Haruskah Saya Menginstal 32 Atau 64 Bit?

  3. Memori tidak aktif Linux