如何在 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(停止)。
相关推荐
2的n次方_5 小时前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构
近津薪荼5 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck5 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
_F_y5 小时前
C++重点知识总结
java·jvm·c++
java干货5 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
_F_y5 小时前
C语言重点知识总结(含KMP详细讲解)
c语言·开发语言
毕设源码-郭学长5 小时前
【开题答辩全过程】以 基于python的二手房数据分析与可视化为例,包含答辩的问题和答案
开发语言·python·数据分析
无小道6 小时前
Qt——常用控件
开发语言·qt
aini_lovee6 小时前
MATLAB基于小波技术的图像融合实现
开发语言·人工智能·matlab
R1nG8636 小时前
多线程安全设计 CANN Runtime关键数据结构的锁优化
开发语言·cann