我調試使用的valgrind和gdb程序調試的時候退出的valgrind乾淨。然而,我以野蠻的方式終止了這些調試會話......它真的是如何完成的?使用gdb
設置調試會話
繼從official valgrind website我做了以下運行程序的說明:
我跑Valgrind的輸入
valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run
從另一個終端會話,我跑使用
GDB我連接GDB到Valgrind的
(gdb) target remote | vgdb
我從gdb的CLI運行程序
(gdb) c
到目前爲止好:該程序在兩個終端上運行(使用一個對於valgrind和用於gdb的)。然後valgrind發現錯誤,例如無效的讀取,並且程序執行被暫停。
終止會話
在這一點上,我想我的代碼撥弄:也許從修復程序的源東西,或註釋/取消註釋的東西。因此,程序需要重新編譯。生成一個新的二進制文件。之後,我想停止正在進行的valgrind和gdb會話(即使用舊的二進制文件)並啓動新的valgrind和gdb會話,這些會話將使用新的二進制文件。
要停止正在進行的會話,我不幹了GDB
(gdb) q
有時Valgrind的告示,廣發行已經不存在,並退出了。但其他時間的valgrind不斷去偶雖然沒有GDB過程存在了......
在這種情況下,我殺了相應的valgrind我的會話「MEMCHECK-amd64-」的過程。該過程的號碼在valgrind消息中指示,例如16195
in ==16195== Invalid read of size 8
)。
kill -9 16195
定期殺是不夠的:我需要使用選項。
我不認爲調用kill -9
是它是如何打算做......我缺少的東西?
Valgrind的版本:3.10.1
gdb的版本:7.7.1
仍然是一個使用valgrind v3.11.0和gdb RHEL 7.11-67.el6的問題。 –