valgrind + gdb的Eclipse CDT设置

eag*_*123 5 c++ eclipse gdb valgrind eclipse-cdt

如何在Eclipse中使用gdb调试valgrind运行?

我这样启动程序:

航站楼A:

valgrind vgdb=yes --vgdb-error=0 ./a.out
Run Code Online (Sandbox Code Playgroud)

它可以从另一个终端调试它,如下所示:

B航站楼:

gdb ./a.out
target remote |vgdb
Run Code Online (Sandbox Code Playgroud)

但我无法在Eclipse中使用它...所以,我想在Eclipse中以图形方式执行我可以通过终端B中的命令行执行的操作.

我尝试了很多方法在Eclipse中设置调试配置,但我无法让它工作.

我得到的最接近的是"C++ Attach to Application",我在最后根据这篇文章加载了一个自定义的.gdbinit:https://www.eclipse.org/forums/index.php/t/681832/

启动该配置后,valgrind将继续运行(到下一个错误),但Eclipse会报告应用程序已终止,并且还会终止gdb会话.

另外两个可能有用的链接:https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 266987 http://www.eclipse.org/forums/index.php/t/354700/ ,

我正在使用Eclipse 4.5.1(Mars.1)

编辑:

我取得了一些进展 - 我找到了两种几乎可以按照我的意愿工作的方法:

1)我在.gdbinit中使用"C/C++ Application"设置:

file /path/to/a.out
target remote | /usr/bin/vgdb
set sysroot /
define run
Run Code Online (Sandbox Code Playgroud)

请注意,我必须专门将"file"语句添加到gdbinit.这种情况的缺点是,当我尝试退出/ kill时,Eclipse正在等待程序永远终止(因为它从未真正开始运行它...).之后我必须手动点击"终止并删除".

如果你可以告诉我一个技巧/黑客如何防止这种情况会很好.

2)我使用与上面相同的.gdbinit"C++ Attach to Application".Eclipse会问我要附加的进程; 我搜索并选择valgrind.我现在可以单步执行代码,但是我无法在Eclipse中设置断点.我只能通过"break file.cpp:line"在gdb shell中做到这一点.

任何想法如何解决?

pow*_*ete 2

不是我最喜欢的解决方案,但它可以在 Ubuntu/Eclipse 上运行:

这些是我的步骤:

创建一个“外部工具”:

  • 姓名:Example Starter
  • 地点:/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
Run Code Online (Sandbox Code Playgroud)

创建新的调试配置

  • 类型:C/C++ Application
  • 姓名:Example Debugger
  • C/C++ 应用:MyProg.elf
  • 参数 -> 程序参数:不需要参数
  • 调试器->GDB命令文件:/path/to/gdb_vgdb_init

创建一个新的启动组

新的启动组应包含:

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

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