如何在 VS Code 中调试 C++ 程序?

VS Code 调试 C++ 的核心是配置 launch.json(调试配置)和 tasks.json(编译配置),结合官方 C/C++ 插件实现断点、单步执行、变量监控等功能。下面是完整且易懂的调试步骤:

一、前提条件(已完成可跳过)

  1. 已安装 MinGW-w64(Windows)/GCC(Linux/Mac) 编译器,并配置好环境变量(验证:终端输入 g++ --version 能显示版本)。
  2. VS Code 已安装 C/C++ (Microsoft 官方) 插件。

二、调试完整步骤(以 Windows 为例)

步骤 1:准备调试用的 C++ 代码

新建 debug_demo.cpp,写入带逻辑的测试代码(方便看到调试效果):

cpp

运行

复制代码
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int a = 10;
    int b = 20;
    int sum = a + b;
    
    vector<int> nums = {1, 2, 3, 4};
    for (int num : nums) {
        cout << "数字:" << num << endl; // 这里打个断点
    }

    cout << "a + b = " << sum << endl;
    return 0;
}
步骤 2:生成编译配置(tasks.json)

编译是调试的前提,VS Code 需要知道如何编译你的代码:

  1. 按 Ctrl+Shift+B(或点击「终端→运行生成任务」)。
  2. 选择「创建 tasks.json 文件」→ 选择「g++.exe - 生成活动文件」。
  3. 自动生成 tasks.json(存放在 .vscode 文件夹),无需修改,核心作用是告诉 VS Code 用 g++ 编译当前文件,并生成带调试信息的可执行文件。
步骤 3:生成调试配置(launch.json)

这是调试的核心配置,告诉 VS Code 用什么调试器、调试哪个文件:

  1. 点击左侧「运行和调试」图标(或按 Ctrl+Shift+D)。

  2. 点击「创建 launch.json 文件」→ 选择「C++ (GDB/LLDB)」→ 选择「g++.exe - 生成活动文件」。

  3. 自动生成 launch.json,关键配置说明:

    json

    复制代码
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "g++.exe - 生成和调试活动文件",
                "type": "cppvsdbg", // Windows调试器,Linux/Mac为"cppvsdbg"改为"lldb"
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 要调试的可执行文件路径
                "args": [], // 程序运行参数(无则空)
                "stopAtEntry": false, // 是否在程序入口(main函数)自动暂停
                "cwd": "${fileDirname}", // 工作目录
                "environment": [],
                "externalConsole": false, // 是否弹出外部终端(建议false,用VS Code内置终端)
                "MIMode": "gdb",
                "miDebuggerPath": "gdb.exe", // 调试器路径(MinGW已配环境变量则无需改)
                "preLaunchTask": "C/C++: g++.exe 生成活动文件", // 调试前先执行的编译任务(必须和tasks.json里的任务名一致)
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ]
            }
        ]
    }
步骤 4:开始调试(核心操作)
  1. 打断点 :在代码行号左侧点击,出现红色小圆点(比如在 cout << "数字:" << num << endl; 这行打断点)。
  2. 启动调试 :按 F5(或点击「运行和调试」面板的绿色三角按钮)。
  3. 调试控制(顶部调试工具栏) :
    • ▶️ 继续(F5):从当前断点继续运行到下一个断点。
    • ⏭️ 单步跳过(F10):执行当前行,不进入函数内部(适合循环 / 简单代码)。
    • ⏬ 单步进入(F11):进入当前行调用的函数内部(比如调用自定义函数时用)。
    • ⏫ 单步退出(Shift+F11):从当前函数退出到调用处。
    • ⏹️ 停止调试(Shift+F5):结束调试。
  4. 监控变量 :
    • 左侧「变量」面板:自动显示当前作用域的变量值(如 a=10、b=20、num 随循环变化)。
    • 「监视」面板:手动输入变量名(如 sum),实时监控其值。
    • 「调用堆栈」面板:查看函数调用层级(main 函数是顶层)。
步骤 5:调试结束

调试完成后,按 Shift+F5 停止,或点击调试工具栏的停止按钮即可。

三、常见问题解决

  1. 调试提示 "找不到任务" :检查 launch.json 中 preLaunchTask 的值,必须和 tasks.json 里的 label 完全一致(包括空格)。
  2. 断点灰色(未命中) :确保编译时生成了调试信息(tasks.json 中 g++ 命令默认带 -g 参数,无需手动加),且代码已保存、重新编译。
  3. 变量显示乱码 :在 launch.json 中添加 "environment": [{"name": "LC_ALL", "value": "zh_CN.UTF-8"}](Windows)。

总结

  1. VS Code 调试 C++ 的核心是配置 tasks.json(编译)和 launch.json(调试),且两者的任务名必须匹配;
  2. 调试的关键操作是「打断点 + F5 启动 + F10/F11 控制执行 + 左侧面板监控变量」;
  3. 核心调试快捷键:F5(启动 / 继续)、F10(单步跳过)、F11(单步进入)、Shift+F5(停止)。
相关推荐
h39743 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
夏幻灵5 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码5 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客6 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx6 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆6 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光7 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园7 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西8 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨8 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言