【问题标题】:Debug as soon as a process start进程启动后立即调试
【发布时间】:2014-07-02 09:43:45
【问题描述】:

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

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

是否有一种非侵入式的方式(不修改我的程序)来启动 Eclipse 并在我的程序启动后立即对其进行调试。

尝试 1: (确定我是否可以使用 gdbserver 作为客户机,以 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 设置 [Debugger -> GdbServer Settings] 确定端口号。就我而言,它是 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 插件)

【问题讨论】:

标签: c++ eclipse windows debugging gdb


【解决方案1】:

当手动启动进程时,可以选择在挂起状态下启动它 - 生成的进程将准备好一切,但不会执行主线程的一条指令(参见 CreateProcess 的 CREATE_SUSPENDED 标志)

我会写两个小程序:一个是在挂起状态下启动一个特定的进程;另一个选择一个特定的进程并为主线程调用ResumeThread

那么调试场景将是:

  • 创建目标进程挂起
  • 附加调试器
  • 恢复进程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2019-10-05
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2016-06-05
    相关资源
    最近更新 更多