【发布时间】:2014-07-02 09:43:45
【问题描述】:
我目前正在尝试在 Windows 中通过 gcc 调试 Cygwin 编译的 C++ 代码,并希望在程序启动后立即附加。为此,我启动了gflags,并配置为在程序执行时启动gdb。
不幸的是,我还想要一个可视化调试器,并计划使用 CDT(Eclipse C/C++ 插件)来调试我的程序。
是否有一种非侵入式的方式(不修改我的程序)来启动 Eclipse 并在我的程序启动后立即对其进行调试。
尝试 1: (确定我是否可以使用 gdbserver 作为客户机,以 Eclipse 作为主机。如果可以,我可以配置 gflags 以启动 gdbserver)
- 下载了 gdb 源并构建了 gdbserver
- 在 Eclipse 中创建了本地连接
- 更改为远程系统资源管理器透视图 [Windows -> 打开透视图 -> 其他 -> 远程系统探索]
- 已创建本地连接
- 打开了新建连接向导对话框 [远程系统资源管理器 -> 连接]
- 选择本地作为远程系统类型
- 提供了连接名称 Bash(默认接受其他选项)
- 创建了 C/C++ 远程应用程序调试配置
- [运行->调试配置->C/C++远程应用]
- 选择了可执行文件(在我的例子中是 bash.exe)
- 添加了项目名称 (bash)
- 选择本地连接
- 从 Gdbserver 设置 [Debugger -> GdbServer Settings] 确定端口号。就我而言,它是 2345。
- 打开命令提示符并启动 gdbserver `gdbserver :2345 bash.exe'
- 切换回 Eclipse 并在“调试配置”对话框中单击“调试”
输出:
在控制台错误信息中
'cmd' is not recognized as an internal or external command,
operable program or batch file.
尝试 2 (进行中,创建 Eclipse 插件)
【问题讨论】:
-
不了解 Eclipse 但 WinDbg 允许非侵入式调试:msdn.microsoft.com/en-us/windows/hh852365.aspx
-
@EdChum:WinDbg 在这里可能不是一个好的调试器,因为它不是通过 gcc 编译的 cygwin 二进制文件,因此调试信息可能不是很有用。
-
我没有 Eclipse 的经验,但可以使用 adding a registry entry under Image File Execution Options 提供的 Visual Studio 文档中的相同技术。也见MSDN here。
-
@RogerRowland:是的,gflags 做了同样的事情,尽管没有求助于编辑注册表。但是,如果没有WinGDB,Visual Studio 无法调试 cygwin 编译的二进制文件。
标签: c++ eclipse windows debugging gdb