进程启动后立即进行调试

时间:2014-07-02 09:43:46

标签: 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. 已更改为Remote System Explorer透视图[Windows - >开放视角 - >其他 - >远程系统探索]
    2. 创建了本地连接
    3. 打开“新建连接向导”对话框[远程系统资源管理器 - >连接]
    4. 选择本地作为远程系统类型
    5. 提供连接名称Bash(默认接受其他选项)
  3. 创建了一个C / C ++远程应用程序调试配置
    1. [运行 - >调试配置 - > C / C ++远程应用程序]
    2. 选择了可执行文件(在我的情况下是bash.exe)
    3. 添加了项目名称(bash)
    4. 选择Connection as Local
    5. 从Gdbserver设置确定端口号[Debugger - > GdbServer设置]。就我而言,它是2345。
  4. 打开命令提示符并启动gdbserver`gdbserver:2345 bash.exe'
  5. 切换回Eclipse并单击Debug Configuration对话框上的Debug
  6. 输出:

    在控制台错误消息

    'cmd' is not recognized as an internal or external command,
    operable program or batch file.
    

    尝试2 (正在进行中,创建Eclipse插件)

1 个答案:

答案 0 :(得分:0)

当手动启动进程时,有一个选项可以在挂起状态下启动它 - 生成的进程将准备就绪,但不会执行主线程的单个指令(请参阅CreateProcess的CREATE_SUSPENDED标志)

我会编写两个小程序:一个用于在暂停状态下启动特定进程;另一个选择特定进程并为主线程调用ResumeThread

调试方案将是:

  • 创建暂停的目标流程
  • 附加调试器
  • 恢复流程