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

配置步骤:

  1. 按 Win+S,搜索“编辑系统环境变量”
  2. 点击“环境变量”
  3. 在“系统变量”里找到 Path,双击打开
  4. 点击“新建”,填入上面的 bin 路径
  5. 一路点击“确定”
  6. 彻底关闭 VSCode,再重新打开

重新打开 VSCode 后,打开终端,检查:

g++ --version
gdb --version

能看到版本信息,说明编译器和调试器已经配置好。

推荐安装顺序是:

  1. 安装 VSCode
  2. 安装 Microsoft 的 C/C++ 扩展
  3. 安装 MinGW-w64 工具链
  4. 把工具链的 bin 目录加入 PATH
  5. 重启 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 必须指向生成出来的 .exe
  • preLaunchTask 必须和 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 Terminal
  • Save 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 只要有一个字不一样,就会连不上。

动手检查

  1. 新建 main.cpp,编译并运行一次。
  2. 在 main 里打一处断点,按 F5。
  3. 把输出改成两行,再编译一次,确认新代码真的生效。
  4. 如果程序有输入,把输入从终端喂进去,确认调试时也能读到。

立即练习

难度 任务 训练目标
基础 写一个 hello world 跑通编译和运行
基础 给程序加一个断点并按 F5 认识调试器
巩固 洛谷 P1001:A+B Problem 在 VSCode 中完成编译、运行和提交