2012-03-15 19 views
5

Değerli bellek sızıntıları için uzun süre çalışan bir işlem olup olmadığını kontrol etmek istiyorum. Hafıza sızıntısından şüpheleniyorum, ancak birkaç saat sonra gerçekleşebilir. Ben app valgrind altında çalıştırmak ve valgrind günlüğü sadece güzel olsun, ama bu yüzden ben uygulamayı bırakmak ve yine birkaç saat beklemek zorunda kalacak yeni bir valgrind oturumu için yeniden yeniden başlamak zorunda anlamına gelir. Valgrind ve uygulama çalışan tutmak ve hala yürütme sırasında herhangi bir noktada valgrind (kısmi) veri almak mümkün mü?Profilli uygulamadan çıkmak zorunda kalmadan çıktı kısmi raporlarını doğrulayabilir mi?

cevap

8

Bunu Valgrind gdbserver and GDB kullanarak yapabilirsiniz.

Kısacası, her zamanki gibi valgrind ile programınızı başlatmak, ancak --vgdb=yes anahtarı ile:

$ valgrind --tool=memcheck --vgdb=yes ./a.out 

başka oturumda, aynı yürütülebilir üzerinde gdb başlatın ve valgrind bağlanın. Daha sonra valgrind komutlar verebilir:

$ gdb ./a.out 
... 
(gdb) target remote | vgdb 
.... 
(gdb) monitor leak_check full reachable any 
==8677== 32 bytes in 1 blocks are definitely lost in loss record 1 of 2 
==8677== at 0x4C28E3D: malloc (vg_replace_malloc.c:263) 
==8677== by 0x400591: foo (in /home/me/tmp/a.out) 
==8677== by 0x4005A7: main (in /home/me/tmp/a.out) 
==8677== 
==8677== 32 bytes in 1 blocks are definitely lost in loss record 2 of 2 
==8677== at 0x4C28E3D: malloc (vg_replace_malloc.c:263) 
==8677== by 0x400591: foo (in /home/me/tmp/a.out) 
==8677== by 0x4005AC: main (in /home/me/tmp/a.out) 
==8677== 
==8677== LEAK SUMMARY: 
==8677== definitely lost: 64 bytes in 2 blocks 
==8677== indirectly lost: 0 bytes in 0 blocks 
==8677==  possibly lost: 0 bytes in 0 blocks 
==8677== still reachable: 0 bytes in 0 blocks 
==8677==   suppressed: 0 bytes in 0 blocks 
==8677== 
(gdb) 

komutları, MemCheck için here listesi için el kitabına bakın.

İlgili konular