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

命令行编译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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:37:29