如何在 Eclipse 中调试使用 gdb 运行的 valgrind?
我这样启动程序:
A 航站楼:
valgrind vgdb=yes --vgdb-error=0 ./a.out
它可以像这样从另一个终端调试它:
航站楼 B:
gdb ./a.out
target remote |vgdb
但我无法让它在 Eclipse 中工作... 因此,我想在 Eclipse 中以图形方式执行我可以通过终端 B 中的命令行执行的操作。
我尝试了很多方法在 Eclipse 中设置调试配置,但我无法让它工作。
我最接近的是通过“C++ 附加到应用程序”,其中我根据这篇文章最后加载了一个自定义的 .gdbinit:https://www.eclipse.org/forums/index.php/t/681832/
开始该配置后,valgrind 继续运行(到下一个错误),但 Eclipse 随后报告应用程序终止,并且它还终止了 gdb session 。
另外两个可能有用的链接: https://bugs.eclipse.org/bugs/show_bug.cgi?id=269687 http://www.eclipse.org/forums/index.php/t/354700/ ,
我正在使用 Eclipse 4.5.1 (Mars.1)
编辑:
我取得了一些进展 - 我发现了两种几乎可以如我所愿地工作的方法:
1) 我在 .gdbinit 中使用“C/C++ 应用程序”设置:
file /path/to/a.out
target remote | /usr/bin/vgdb
set sysroot /
define run
请注意,我必须专门将"file"语句添加到 gdbinit。 这种情况下的缺点是,当我尝试退出/终止时,Eclipse 正在等待程序永远终止(因为它从未真正开始运行它......)。之后我必须手动单击“终止并删除”。
如果你能告诉我如何防止这种情况发生,那就太好了。
2) 我将“C++ 附加到应用程序”与上面的相同 .gdbinit 一起使用。 Eclipse 会询问我要附加的进程;我搜索并选择 valgrind。 我现在可以单步执行代码,但无法在 Eclipse 中设置断点。 我只能在 gdb shell 中通过“break file.cpp:line”来做到这一点。
有什么解决办法吗?
最佳答案
不是我最喜欢的解决方案,但它适用于 Ubuntu/Eclipse:
这些是我的步骤:
创建“外部工具”:
- 姓名:
入门示例
- 位置:
/usr/bin/valgrind
- 参数:
--vgdb=full --vgdb-error=0 --leak-check=full -v ./MyProg.elf argument1 ...
创建自定义的 gdb 初始化文件
文件 gdb_vgdb_init 的内容:
target remote | /usr/bin/vgdb
set sysroot /
define run
创建一个新的调试配置
- 类型:
C/C++ 应用程序
- 名称:
示例调试器
- C/C++ 应用程序:
MyProg.elf
- 参数 -> 程序参数:不需要参数
- 调试器 -> GDB 命令文件:
/path/to/gdb_vgdb_init
创建一个新的启动组
新的启动组应该包含:
- 创建了外部工具
Example Starter
(在运行模式下) - 创建了 C/C++ 应用程序
示例调试器
(在调试模式下)
之后启动组就可以启动了。 Launchgroup 将启动一个 valgrind,包括。 gdb 连接到它。
关于c++ - valgrind + gdb 的 Eclipse CDT 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232381/