2012-03-15 28 views
5

Tôi muốn kiểm tra một quá trình chạy bộ nhớ bị rò rỉ lâu dài với valgrind. Tôi nghi ngờ rò rỉ bộ nhớ tôi sau khi có thể xảy ra chỉ sau vài giờ thi hành. Tôi có thể chạy các ứng dụng dưới valgrind và nhận được valgrind đăng nhập tốt, nhưng làm như vậy có nghĩa là tôi phải thoát khỏi ứng dụng và bắt đầu lại một lần nữa cho một phiên valgrind mới mà tôi vẫn sẽ phải chờ vài giờ. Có thể giữ valgrind và ứng dụng đang chạy và vẫn nhận được dữ liệu (một phần) của valgrind tại bất kỳ thời điểm nào trong quá trình thực hiện không?Có thể valgrind xuất báo cáo một phần mà không cần phải thoát khỏi ứng dụng được lược tả?

Trả lời

8

Bạn có thể làm điều đó bằng cách sử dụng Valgrind gdbserver and GDB.

Nói tóm lại, bạn bắt đầu chương trình của bạn với valgrind như thường lệ, nhưng với sự --vgdb=yes switch:

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

Trong phiên khác, bạn bắt đầu gdb trên cùng một thực thi, và kết nối với valgrind. Sau đó, bạn có thể ra lệnh valgrind:

$ 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) 

Xem sách hướng dẫn để biết danh sách lệnh, here để ghi nhớ.

Các vấn đề liên quan