如何让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
- 创建调试配置
- 点击右上角配置下拉框,选择
Edit Configurations... - 点击
+号,选择GDB Remote Debug(本地调试也适用) - 配置项:
Target remote host填localhostRemote symbol file选择你的C++可执行文件路径Port保持默认2345或自定义
- 点击右上角配置下拉框,选择
- 添加启动等待逻辑
在C++main开头加入代码,等待CLion的调试连接:#include <unistd.h> #include <cstdio> int main() { printf("等待调试连接,PID: %d\n", getpid()); // 循环等待,直到调试器附加后手动终止循环 while (true) sleep(1); // 原有代码... } - 启动调试
- 先启动CLion的调试配置(点击调试按钮),IDE会等待连接
- 启动Java程序,触发C++进程启动
- 在CLion的调试控制台输入
target remote localhost:2345完成连接 - 设置断点后,在控制台执行
set var i=1(或修改循环条件)让程序继续,即可调试启动代码
clangd + VSCode
- 准备工作
确保已安装C/C++ Extension Pack插件,包含clangd和GDB调试支持 - 配置调试文件
按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 } ] } - 启动调试
- 在C++
main开头加入raise(SIGSTOP)暂停逻辑 - 启动Java程序,C++进程会自动挂起
- VSCode中按
F5,在进程列表中选择目标C++进程 - 附加成功后,在调试控制台输入
continue,即可调试启动代码
- 在C++
Qt Creator
- 配置调试模式
打开Projects选项卡,切换到Debug页面,选择Attach to running process作为启动方式 - 添加暂停逻辑
在C++main开头加入raise(SIGSTOP),确保进程启动后挂起 - 启动调试
- 启动Java程序,触发C++进程启动
- 点击Qt Creator的
Debug->Start Debugging->Attach to Running Process - 在进程列表中选择目标C++进程,点击
Attach - 附加成功后,在调试控制台输入
continue,即可调试启动代码
内容的提问来源于stack exchange,提问作者smit patil
相关产品推荐
相关产品推荐

