使用 gdb 调试时彻底退出 valgrind

2024-04-21

我正在使用 valgrind 和 gdb 调试程序。然而,我以一种野蛮的方式终止了这些调试会话……这真的是它应该做的吗?

设置调试会话

按照来自的指示valgrind 官方网站 http://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver-gdb我执行以下操作来运行该程序:

  1. 我通过输入运行 valgrind

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

    gdb ./prgm.run
    
  3. 我将 gdb 连接到 valgrind

    (gdb) target remote | vgdb
    
  4. 我从 gdb CLI 运行该程序

    (gdb) c
    

到目前为止一切顺利:程序在两个终端中运行(一个用于 valgrind,一个用于 gdb)。然后 valgrind 发现错误,例如无效读取,并且程序执行暂停。

终止会话

那时,我想摆弄我的代码:也许修复某些内容或从程序源代码中注释/取消注释内容。因此,需要重新编译该程序。生成一个新的二进制文件。接下来,我想停止正在进行的 valgrind 和 gdb 会话(使用旧二进制文件)并启动将使用新二进制文件的新 valgrind 和 gdb 会话。

为了停止正在进行的会话,我退出了 gdb

(gdb) q

有时 valgrind 会注意到 gdb 不再存在并退出。但其他时候,即使不再存在 gdb 进程,valgrind 也会继续运行……

在这种情况下,我会终止与我的 valgrind 会话相对应的“memcheck-amd64-”进程。该进程的编号在 valgrind 消息中指示,例如16195 in ==16195== Invalid read of size 8).

kill -9 16195

常规杀戮是不够的:我需要使用-9 option.

我不认为调用kill -9这就是它应该如何完成的......我错过了什么吗?

valgrind 版本:3.10.1

gdb版本:7.7.1


你也可以使用命令

(gdb)monitor v.kill

它列在 gdb 的监视器帮助中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gdb 调试时彻底退出 valgrind 的相关文章

随机推荐