命令行编译C++项目后如何在Ubuntu的VSCode中调试
在VSCode(Ubuntu)中调试依赖外部库的C++代码
针对你需要调试lib_a.cpp和lib_b.cpp的需求,我们可以通过配置VSCode的tasks.json(编译任务)和launch.json(调试任务)来实现,结合你后来验证有效的调整方案,具体步骤如下:
1. 配置tasks.json(编译调试版本的代码)
首先,我们需要把你原来的编译命令转化为VSCode的编译任务,核心是生成带调试符号的目标文件和可执行程序,同时关闭代码优化。
在VSCode中,按Ctrl+Shift+B打开任务面板,选择"创建tasks.json文件",然后选择"Others",替换为以下配置:
{ "version": "2.0.0", "tasks": [ // 编译lib_a.cpp生成带调试符号的a.o { "label": "compile lib_a", "type": "shell", "command": "g++", "args": [ "-c", "-g", "-I../../include/boost_1_61_0", "-std=c++14", "-MMD", "-MP", "-MF", "a.o.d", "-o", "a.o", "../../my_Library/lib_a.cpp" ], "group": "build", "problemMatcher": "$gcc" }, // 编译lib_b.cpp生成带调试符号的b.o { "label": "compile lib_b", "type": "shell", "command": "g++", "args": [ "-c", "-g", "-I../../include/boost_1_61_0", "-std=c++14", "-MMD", "-MP", "-MF", "b.o.d", "-o", "b.o", "../../my_Library/lib_b.cpp" ], "group": "build", "problemMatcher": "$gcc" }, // 链接生成带调试符号的可执行文件out { "label": "link out", "type": "shell", "command": "g++", "args": [ "-g", "-std=c++11", "-o", "out", "a.o", "b.o", "-L../../include/shared_libraries", "-no-pie", "-lcurl", "-lpthread", "-lsqlite3", "-lrt", "-fopenmp", "-lboost_serialization", "-lconfig++", "-lpq", "-lstdc++", "-lz", "-lboost_thread", "-lboost_system", "-lboost_program_options" ], "group": { "kind": "build", "isDefault": true }, "dependsOn": ["compile lib_a", "compile lib_b"], "problemMatcher": "$gcc" } ] }
这个配置会先编译两个库文件生成带调试符号的.o文件,再链接成可执行程序out,且会自动处理编译依赖。
2. 配置launch.json(启动调试)
接下来配置调试任务,按F5打开调试面板,选择"创建launch.json文件",选择"C++ (GDB/LLDB)",替换为以下配置:
{ "version": "0.2.0", "configurations": [ { "name": "Debug C++ Program", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "preLaunchTask": "link out", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }
这里的preLaunchTask会在调试前自动执行编译链接任务,确保你调试的是最新版本的代码。
3. 关键调试注意事项(亲测有效)
根据你后来的成功经验,有几个必须注意的核心点:
- 移除
-O3优化参数:代码优化会打乱执行流程,导致断点错位、变量值无法正确显示,调试时一定要关闭所有优化。 - 添加
-g调试符号:编译和链接阶段都要加上这个参数,它会生成GDB需要的调试信息,让VSCode能关联到源代码。 program字段指向可执行文件:不要填.o文件路径,调试的是最终生成的out程序,只有完整的可执行文件才能正常启动调试会话。
完成以上配置后,你就可以在lib_a.cpp或lib_b.cpp中设置断点,按F5启动调试,正常单步执行、查看变量了。
内容的提问来源于stack exchange,提问作者Eliya
相关产品推荐
相关产品推荐

