2012-03-15 22 views
5

valgrindを使用してメモリリークの長期実行プロセスをチェックしたいと考えています。後のメモリリークは、数時間の実行後に起こる可能性があると私は思っています。私はvalgrindの下でアプリケーションを実行し、valgrindログを正常に取得することができますが、私はアプリケーションを終了し、私はまだいくつかの時間を待たなければならない新しいvalgrindセッションのために再びそれを開始する必要があることを意味します。 valgrindとアプリケーションを実行したままにして、実行中の任意の時点でvalgrind(部分)データを取得することは可能ですか?プロファイリングされたアプリケーションを終了することなく出力レポートの一部を出力できますか?

答えて

8

これは、Valgrind gdbserver and GDBを使用して行うことができます。

は一言で言えば、あなたはいつものようにvalgrindのを使用してプログラムを起動しますが、--vgdb=yesスイッチで:

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

別のセッションでは、同じ実行可能でGDBを起動し、valgrindのに接続します。その後、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) 

は、コマンドのリストについては、memcheckためhereをマニュアルを参照してください。

関連する問題