c++ - 进程启动后立即调试

标签 c++ eclipse windows debugging gdb

我目前正在尝试通过 Windows 中的 gcc 调试 Cygwin 编译的 C++ 代码,并希望在程序启动后立即附加。为此,我启动了 gflags 并配置为在程序执行时启动 gdb

不幸的是,我还想要一个可视化调试器,并计划使用 CDT(Eclipse C/C++ 插件)来调试我的程序。

有没有一种非侵入式的方式(不修改我的程序)来启动 Eclipse 并在它启动后立即调试我的程序。

尝试 1: (确定我是否可以使用 gdbserver 作为 guest ,将 Eclipse 作为主机。如果可行,我可以配置 gflags 来启动 gdbserver)

  1. 下载了 gdb 源代码并构建了 gdbserver
  2. 在 Eclipse 中创建了一个本地连接
    1. 更改为远程系统资源管理器视角 [Windows -> 打开视角 -> 其他 -> 远程系统资源管理器]
    2. 创建本地连接
    3. 打开新建连接向导对话框 [远程系统资源管理器 -> 连接]
    4. 选择本地作为远程系统类型
    5. 提供了一个连接名称 Bash(默认接受其他选项)
  3. 创建了 C/C++ 远程应用程序调试配置
    1. [运行 -> 调试配置 -> C/C++ 远程应用]
    2. 选择可执行文件(在我的例子中是 bash.exe)
    3. 添加了项目名称 (bash)
    4. 选择本地连接
    5. 从 Gdbserver 设置 [调试器 -> GdbServer 设置] 确定端口号。在我的例子中是 2345。
  4. 打开命令提示符并启动 gdbserver `gdbserver :2345 bash.exe'
  5. 切换回 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/

相关文章:

C++:具有相同要求的此范围 View 构造的替代方案?

python - 从 Conda 环境运行时,PyDev/Eclipse 不加载 _mklinit

java - 当我访问特定类时 Eclipse 不断崩溃

Python命令行不接受制表符

windows - 使用现有的TCP连接发送数据包

c++ - 是否有适用于 Windows 的 iTunes C++ 库允许访问 USB 连接的 iOS 设备的文件系统?

c++ - 使用Opencv获取多张图片的std偏差

c++ - 强制使通用模板失败,但允许特化,加上 "method exists dispatching"

c++ - 如何在VC++中使用.lib、.dll和.exp文件?

eclipse - 乌龟相当于 'replace with latest from repository"?