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中做到这一点.
任何想法如何解决?
不是我最喜欢的解决方案,但它可以在 Ubuntu/Eclipse 上运行:
这些是我的步骤:
Example Starter
/usr/bin/valgrind
--vgdb=full --vgdb-error=0 --leak-check=full -v ./MyProg.elf argument1 ...
文件gdb_vgdb_init的内容:
target remote | /usr/bin/vgdb
set sysroot /
define run
Run Code Online (Sandbox Code Playgroud)
C/C++ Application
Example Debugger
MyProg.elf
/path/to/gdb_vgdb_init
新的启动组应包含:
Example Starter
(在运行模式下)Example Debugger
(在调试模式下)之后可以启动启动组。Launchgroup 将启动 valgrind,包括。gdb 连接到它。