You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C++程序启动时自动附加到GDB?含主流IDE配置方法

解决Java启动C++程序的启动代码调试问题

通用解决方案(无需IDE配置)

方案A:修改C++代码,启动时主动暂停等待调试

在C++程序的main函数最开头插入暂停逻辑,让进程启动后立刻挂起,直到调试器附加并恢复执行:

#include <csignal>

int main() {
    // 发送SIGSTOP信号,让进程暂停等待调试器附加
    raise(SIGSTOP);

    // 以下是原有启动代码
    // ...
    return 0;
}

编译后,Java启动该C++程序时,进程会处于暂停状态:

  • 用ps aux | grep <程序名>找到进程PID
  • 执行gdb -p <PID>附加进程
  • 在GDB中输入continue(或简写c),即可从启动代码开始调试

方案B:让Java通过GDB启动C++程序

修改Java中启动C++进程的逻辑,直接调用GDB启动目标程序,确保调试器从进程启动时就附着:

ProcessBuilder pb = new ProcessBuilder(
    "gdb", "--args", "/绝对路径/你的C++可执行文件", "参数1", "参数2"
);
pb.inheritIO();
Process process = pb.start();

运行Java程序后,GDB会进入交互模式,输入run(或r)即可开始调试启动代码。


各IDE具体操作步骤

CLion

  1. 创建调试配置
    • 点击右上角配置下拉框,选择Edit Configurations...
    • 点击+号,选择GDB Remote Debug(本地调试也适用)
    • 配置项:
      • Target remote host填localhost
      • Remote symbol file选择你的C++可执行文件路径
      • Port保持默认2345或自定义
  2. 添加启动等待逻辑
    在C++main开头加入代码,等待CLion的调试连接:
    #include <unistd.h>
    #include <cstdio>
    
    int main() {
        printf("等待调试连接,PID: %d\n", getpid());
        // 循环等待,直到调试器附加后手动终止循环
        while (true) sleep(1);
        // 原有代码...
    }
    
  3. 启动调试
    • 先启动CLion的调试配置(点击调试按钮),IDE会等待连接
    • 启动Java程序,触发C++进程启动
    • 在CLion的调试控制台输入target remote localhost:2345完成连接
    • 设置断点后,在控制台执行set var i=1(或修改循环条件)让程序继续,即可调试启动代码

clangd + VSCode

  1. 准备工作
    确保已安装C/C++ Extension Pack插件,包含clangd和GDB调试支持
  2. 配置调试文件
    按F5进入调试配置,选择C++ (GDB/LLDB)生成launch.json,修改为以下内容:
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "附加到进程(启动调试)",
                "type": "cppdbg",
                "request": "attach",
                "program": "/绝对路径/你的C++可执行文件",
                "processId": "${command:pickProcess}",
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "justMyCode": false
            }
        ]
    }
    
  3. 启动调试
    • 在C++main开头加入raise(SIGSTOP)暂停逻辑
    • 启动Java程序,C++进程会自动挂起
    • VSCode中按F5,在进程列表中选择目标C++进程
    • 附加成功后,在调试控制台输入continue,即可调试启动代码

Qt Creator

  1. 配置调试模式
    打开Projects选项卡,切换到Debug页面,选择Attach to running process作为启动方式
  2. 添加暂停逻辑
    在C++main开头加入raise(SIGSTOP),确保进程启动后挂起
  3. 启动调试
    • 启动Java程序,触发C++进程启动
    • 点击Qt Creator的Debug->Start Debugging->Attach to Running Process
    • 在进程列表中选择目标C++进程,点击Attach
    • 附加成功后,在调试控制台输入continue,即可调试启动代码

内容的提问来源于stack exchange,提问作者smit patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:32:44