c++ - valgrind + gdb 的 Eclipse CDT 设置

标签 c++ eclipse gdb valgrind eclipse-cdt

如何在 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

创建一个新的启动组

新的启动组应该包含:

  1. 创建了外部工具 Example Starter(在运行模式下)
  2. 创建了 C/C++ 应用程序示例调试器(在调试模式下)

之后启动组就可以启动了。 Launchgroup 将启动一个 valgrind,包括。 gdb 连接到它。

关于c++ - valgrind + gdb 的 Eclipse CDT 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232381/

相关文章:

c - 如何使用 makefile 调试项目

c++ - 释放链表节点时出现段错误

c++ - 匿名结构内部循环

C++ 函数指针语法

java - Blackberry Java 中的类之间调用

eclipse - 使用所有插件引导新的 Eclipse 机器

c++ - GDB 如何知道它必须在指定的断点处中断?

c++ - 缩放位图输出会扭曲图像

java - 无法从元素类型对象转换为字符串

c++ - gdb catch throw,这个线程