如何在 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=10b=20num 随循环变化)。
    • 「监视」面板:手动输入变量名(如 sum),实时监控其值。
    • 「调用堆栈」面板:查看函数调用层级(main 函数是顶层)。
步骤 5:调试结束

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

三、常见问题解决

  1. 调试提示 "找不到任务" :检查 launch.jsonpreLaunchTask 的值,必须和 tasks.json 里的 label 完全一致(包括空格)。
  2. 断点灰色(未命中) :确保编译时生成了调试信息(tasks.jsong++ 命令默认带 -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(停止)。
相关推荐
Overt0p2 小时前
抽奖系统(7)
java·开发语言·spring boot·redis·tomcat·rabbitmq
JANG10242 小时前
【Qt】项目打包
开发语言·qt
CoderCodingNo2 小时前
【GESP】C++五级/六级练习题(前缀和/动态规划考点) luogu-P1719 最大加权矩形
开发语言·c++·动态规划
xiaoye-duck2 小时前
吃透C++类和对象(中):const成员函数与取地址运算符重载深度解析
c++
学嵌入式的小杨同学2 小时前
循环队列(顺序存储)完整解析与实现(数据结构专栏版)
c语言·开发语言·数据结构·c++·算法
Yu_Lijing2 小时前
基于C++的《Head First设计模式》笔记——适配器模式
c++·笔记·设计模式
txinyu的博客2 小时前
C++ 单例模式
c++·单例模式
点云SLAM2 小时前
C++ 设计模式之工厂模式(Factory)和面试问题
开发语言·c++·设计模式·面试·c++11·工厂模式
亓才孓2 小时前
Java第三代时间API
java·开发语言