C++ 竞赛入门
Windows 下使用 VSCode 编写和调试 C++
Windows 下使用 VSCode 编写和调试 C++
本节学会什么
- 在 Windows 上准备好
VSCode + C/C++ 扩展 + MinGW-w64 + GDB - 在 VSCode 里写
.cpp文件,完成编译和运行 - 用断点、
tasks.json和launch.json完成调试
为什么需要它
Windows 当然也能学 C++,但前提是把编辑器、编译器、调试器接起来。对竞赛来说,最重要的还是 g++、gdb 和终端命令,所以这里不走花哨路线,只走一条稳定的路。
本书在 Windows 上推荐 VSCode + MinGW-w64 + GDB。如果你以后要往竞赛环境靠拢,这套组合最接近常见的 GNU C++17 使用方式。
先准备什么
| 工具 | 作用 | 是否必须 |
|---|---|---|
| VSCode | 写代码 | 是 |
| C/C++ 扩展 | 补全、语法检查、调试入口 | 是 |
| MinGW-w64 | 提供 g++ 和 gdb |
是 |
| Code Runner | 一键运行 | 否,只是辅助 |
如果你已经有现成的 MinGW-w64 目录,只要 g++.exe 和 gdb.exe 能在终端里运行,就可以直接用。
安装 MinGW-w64
先下载这个压缩包:
x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1.7z
下载后解压到 C:\,最后应该得到这个目录:
C:\x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1\mingw64
真正需要加入环境变量的是它下面的 bin 目录:
C:\x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1\mingw64\bin
配置步骤:
- 按
Win+S,搜索“编辑系统环境变量” - 点击“环境变量”
- 在“系统变量”里找到
Path,双击打开 - 点击“新建”,填入上面的
bin路径 - 一路点击“确定”
- 彻底关闭 VSCode,再重新打开
重新打开 VSCode 后,打开终端,检查:
g++ --version
gdb --version
能看到版本信息,说明编译器和调试器已经配置好。
推荐安装顺序是:
- 安装 VSCode
- 安装 Microsoft 的 C/C++ 扩展
- 安装 MinGW-w64 工具链
- 把工具链的
bin目录加入PATH - 重启 VSCode,再检查
g++ --version和gdb --version
最小可运行示例
先新建一个文件夹,比如 cpp-work,然后在里面创建 main.cpp。
输入下面的代码:
#include <iostream>
int main() {
std::cout << "hello, vscode\n";
return 0;
}
打开 VSCode 的集成终端,进入这个目录后执行:
g++ -std=c++17 -g main.cpp -o main.exe
.\main.exe
第一条命令负责编译,-g 会保留调试信息。第二条命令负责运行程序。这里用的是 Windows 的运行方式,PowerShell 下是 .\main.exe。
调试配置
先把断点打在 main 里面,然后按 F5。
如果 VSCode 让你选择环境,选 C/C++: g++.exe build and debug active file 或类似的 GDB 选项。之后它会生成 .vscode/tasks.json 和 .vscode/launch.json。
你也可以直接用下面这份配置。把里面的路径换成你自己的 g++ 和 gdb 路径。
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
这份配置的核心只有三点:
program必须指向生成出来的.exepreLaunchTask必须和tasks.json里的label一致miDebuggerPath必须指向真正的gdb.exe
如果你发现程序需要输入,但调试时不方便,先保持 externalConsole: false,它会走 VSCode 的集成终端;如果你更喜欢独立窗口,再把它改成 true。
如果补全不对
打开命令面板,运行 C/C++: Edit Configurations (UI),把编译器路径指向你的 g++.exe,IntelliSense mode 选 windows-gcc-x64。
这一步不影响你编译运行,但会影响补全和语法提示。
可选:Code Runner
Code Runner 适合快速跑小程序,但它不是调试器。
建议把它的两个选项打开:
Run In TerminalSave File Before Run
这样你按运行时,程序会在终端里执行,也会先保存文件。
常用快捷键
Ctrl+S:保存Ctrl+Shift+P:打开命令面板- `Ctrl+``:打开或关闭终端
F9:打断点F5:开始调试F10:单步跳过F11:单步进入Shift+F11:跳出函数
关键过程与易错点
- 路径改完以后,要重新打开 VSCode 或终端。
- 如果不是解压到
C:\,配置里的g++.exe和gdb.exe路径也要一起改。 - 编译调试都要有
-g,不然断点信息会差很多。 - 运行时要看输出,别把
Debug Console当输入窗口。 - 如果
g++找不到,先查PATH,再查终端有没有重开。 - 如果
gdb找不到,通常是工具链没装全,或者miDebuggerPath写错了。 launch.json里的label和preLaunchTask只要有一个字不一样,就会连不上。
动手检查
- 新建
main.cpp,编译并运行一次。 - 在
main里打一处断点,按F5。 - 把输出改成两行,再编译一次,确认新代码真的生效。
- 如果程序有输入,把输入从终端喂进去,确认调试时也能读到。
立即练习
| 难度 | 任务 | 训练目标 |
|---|---|---|
| 基础 | 写一个 hello world |
跑通编译和运行 |
| 基础 | 给程序加一个断点并按 F5 |
认识调试器 |
| 巩固 | 洛谷 P1001:A+B Problem | 在 VSCode 中完成编译、运行和提交 |