必须安装MinGW-w64并配置gcc/g++/gdb到PATH,VS Code中安装C/C++扩展,正确设置tasks.json(含-g、-O0等参数)和launch.json(指定miDebuggerPath及program路径),缺一不可。

要在 Windows 上让 VS Code 真正跑通 C/C++ 的编译和断点调试,必须让 gcc、g++ 和 gdb 三个可执行文件在系统中可定位,且 VS Code 能通过 tasks.json 和 launch.json 精确调用它们生成带调试信息的可执行文件并挂载调试器——缺一不可,卡在任意一环都会导致 F5 按下后弹窗报错或直接跳过断点。
安装 MinGW-w64 并验证基础可用性
下载 x86_64-posix-seh-ucrt 版本的 MinGW-w64 压缩包(如 x86_64-15.1.0-release-posix-seh-ucrt-rt-v12-rev0.7z),解压到根目录,例如 C:mingw64;路径中【严禁含中文、空格或特殊符号】,否则后续所有调试将失败。
右键“此电脑”→属性→高级系统设置→环境变量→在“系统变量”的 Path 中新建一项:C:mingw64in(注意是 bin 目录,不是 mingw64 根目录)。
关闭所有终端窗口,重新打开 CMD 或 PowerShell,依次执行:
立即学习“C++免费学习笔记(深入)”;
gcc --version → 应输出 GCC 版本号(如 15.1.0)
g++ --version → 必须成功,C++ 项目依赖 g++.exe 而非 gcc.exe
gdb --version → 缺失则断点调试必然失败,这是最常被忽略的硬性前提
配置 VS Code 扩展与工作区文件夹
确保已安装 Microsoft 官方 C/C++ 扩展(ID: ms-vscode.cpptools),它提供智能提示、跳转定义和调试支持;Code Runner 插件仅用于快速运行,不参与调试流程,可选装。
新建一个纯英文路径的工作区文件夹,例如 D:cpp_demo,用 VS Code 打开该文件夹(不是单个 .cpp 文件)。
在资源管理器中右键→新建文件→命名为 main.cpp,输入一段含 main 函数的代码(哪怕只有 #include <iostream> int main(){std::cout)。</iostream>
按 Ctrl+Shift+P → 输入 C/C++: Edit Configurations (UI) → 在 “Compiler path” 下拉框中手动选择 C:mingw64ing++.exe → 保存后自动生成 .vscode/c_cpp_properties.json,其中 compilerPath 和 intelliSenseMode 将自动匹配 MinGW-w64。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
生成并修正 tasks.json:让编译产出可调试的 EXE
按 Ctrl+Shift+P → 输入 Tasks: Configure Default Build Task → 选择 g++.exe build active file。
VS Code 会自动生成 .vscode/tasks.json,打开它,找到 args 数组,确认包含以下四项(顺序不限,但缺一不可):
"-g" → 生成调试符号表,没有它,所有断点显示为“未绑定”
"-O0" → 关闭编译器优化,否则单步执行会跳行、变量值无法查看
"-std=c++17"(或更高)→ 明确指定标准,避免默认旧标准引发语法报错
"-o", "${fileDirname}\${fileBasenameNoExtension}.exe" → 输出路径必须与 launch.json 中 program 字段严格一致,【反斜杠必须双写】
手写 launch.json:把 gdb 绑定到具体可执行文件
按 Ctrl+Shift+P → 输入 Debug: Open launch.json → 选择环境为 C++ (GDB/LLDB) → VS Code 生成模板。
定位到 configurations 数组内对象,修改以下字段:
"program": "${fileDirname}\${fileBasenameNoExtension}.exe" → 必须与 tasks.json 的 -o 输出路径完全一致
"miDebuggerPath": "C:\mingw64\bin\gdb.exe" → 【必须填绝对路径,不能留空或用变量替代】,否则点击 F5 时提示“无法找到 GDB”
"preLaunchTask": "C/C++: g++.exe build active file" → 名称必须与 tasks.json 中的 label 完全一致(包括大小写和空格),否则编译步骤不会自动触发
保存 launch.json,回到 main.cpp,按 Ctrl+F5 清除旧 exe 后再按 F5,调试器应正常启动并在 main 函数首行停住。

















