2016-06-09 50 views
5

我调试使用的valgrind和gdb程序调试的时候退出的valgrind干净。然而,我以野蛮的方式终止了这些调试会话......它真的是如何完成的?使用gdb

设置调试会话

继从official valgrind website我做了以下运行程序的说明:

  1. 我跑Valgrind的输入

    valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run 
    
  2. 从另一个终端会话,我跑使用

    GDB
  3. 我连接GDB到Valgrind的

    (gdb) target remote | vgdb 
    
  4. 我从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

+0

仍然是一个使用valgrind v3.11.0和gdb RHEL 7.11-67.el6的问题。 –

回答

4

,你也可以使用COMAND

(gdb)monitor v.kill 

被列为对GDB监控的帮助。

+0

在'gdb'提示符下(GNU gdb RHEL v7.11-67.el6),'monitor v.kill'导致: ''' “monitor”命令不受此目标支持。 ''' –

+0

@bucket辉煌,谢谢! –

+0

@Egbert可能你的gdb版本不同于我的(8.0版本)。尝试命令“监视帮助”,看看你的gdb版本是否有另一个杀死valgrind进程的命令。 – bucket

-2

对我来说,以下工作:

  1. 断开与gdb第一:(gdb) detach
  2. 然后退出gdb(gdb) quit
  3. Then CTRL + C valgrind。
+0

在'valgrind'处,按CTRL + C结果不变。 –