Valgrind连接GDB报错求助:进程冲突与vgdb未找到问题
Valgrind + GDB 调试问题解决指南
问题场景
按照Valgrind官方文档的快速调试流程操作时,遇到两个问题:
- 执行
valgrind --vgdb-error=0 ./badcode后,启动GDB并输入start,再执行Valgrind给出的target remote命令时,弹出提示:A program is being debugged already. Kill it? (y or n)
- 选择
y后,出现路径错误:sh: 1: /usr/lib/x86_64-linux-gnu/valgrind/../../bin/vgdb: not found
错误原因
- 进程冲突:
start命令会让GDB直接启动本地的badcode实例,和Valgrind托管的进程产生冲突,触发调试程序重复的提示。 - 路径错误:Valgrind生成的vgdb路径是相对路径,实际系统中vgdb的安装位置可能不同,导致找不到可执行文件。
解决步骤
1. 避免GDB本地启动程序
启动GDB后不要输入start命令,直接执行Valgrind给出的target remote连接命令。这样GDB会直接连接到Valgrind托管的进程,不会启动本地实例,也就不会出现冲突提示。
2. 修复vgdb路径问题
两种方法任选其一:
- 方法一:手动指定正确路径
先在终端执行which vgdb,得到vgdb的实际路径(例如/usr/bin/vgdb),然后替换target remote命令中的路径:target remote | /usr/bin/vgdb --pid=101901 - 方法二:直接调用vgdb(如果在PATH中)
若vgdb已在系统环境变量PATH中,可以简化命令:target remote | vgdb --pid=101901
完整正确流程
- 启动Valgrind托管程序:
valgrind --vgdb-error=0 ./badcode - 打开新终端启动GDB:
gdb ./badcode - 在GDB中直接执行修改后的
target remote命令,无需输入start,即可正常连接Valgrind进行调试。
内容的提问来源于stack exchange,提问作者Fyodor
相关产品推荐
相关产品推荐

