我目前正在尝试通过 Windows 中的 gcc 调试 Cygwin 编译的 C++ 代码,并希望在程序启动后立即附加。为此,我启动了 gflags
并配置为在程序执行时启动 gdb
。
不幸的是,我还想要一个可视化调试器,并计划使用 CDT(Eclipse C/C++ 插件)来调试我的程序。
有没有一种非侵入式的方式(不修改我的程序)来启动 Eclipse 并在它启动后立即调试我的程序。
尝试 1: (确定我是否可以使用 gdbserver 作为 guest ,将 Eclipse 作为主机。如果可行,我可以配置 gflags 来启动 gdbserver)
- 下载了 gdb 源代码并构建了 gdbserver
- 在 Eclipse 中创建了一个本地连接
- 更改为远程系统资源管理器视角 [Windows -> 打开视角 -> 其他 -> 远程系统资源管理器]
- 创建本地连接
- 打开新建连接向导对话框 [远程系统资源管理器 -> 连接]
- 选择本地作为远程系统类型
- 提供了一个连接名称 Bash(默认接受其他选项)
- 创建了 C/C++ 远程应用程序调试配置
- [运行 -> 调试配置 -> C/C++ 远程应用]
- 选择可执行文件(在我的例子中是 bash.exe)
- 添加了项目名称 (bash)
- 选择本地连接
- 从 Gdbserver 设置 [调试器 -> GdbServer 设置] 确定端口号。在我的例子中是 2345。
- 打开命令提示符并启动 gdbserver `gdbserver :2345 bash.exe'
- 切换回 Eclipse 并在“调试配置”对话框中单击“调试”
输出:
在控制台错误信息中
'cmd' is not recognized as an internal or external command,
operable program or batch file.
尝试 2 (进行中,创建 Eclipse 插件)
最佳答案
当手动启动一个进程时,有一个选项可以在挂起状态下启动它——生成的进程将准备好一切,但不会执行主线程的任何一条指令(参见 CreateProcess 的 CREATE_SUSPENDED 标志)
我会写两个小程序:一个在挂起状态下启动一个特定的进程;另一个选择一个特定的进程并为主线程调用 ResumeThread
。
调试场景将是:
- 创建目标进程挂起
- 附加调试器
- 恢复进程
关于c++ - 进程启动后立即调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527846/