我调试使用的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的问题。 –