C++ 竞赛入门

Windows 下使用 VSCode 编写和调试 C++

Windows 下使用 VSCode 编写和调试 C++

本节学会什么

  • 在 Windows 上准备好 VSCode + C/C++ 扩展 + MinGW-w64 + GDB
  • 在 VSCode 里写 .cpp 文件,完成编译和运行
  • 用断点、tasks.jsonlaunch.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++.exegdb.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++ --versiongdb --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++.exeIntelliSense modewindows-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++.exegdb.exe 路径也要一起改。
  • 编译调试都要有 -g,不然断点信息会差很多。
  • 运行时要看输出,别把 Debug Console 当输入窗口。
  • 如果 g++ 找不到,先查 PATH,再查终端有没有重开。
  • 如果 gdb 找不到,通常是工具链没装全,或者 miDebuggerPath 写错了。
  • launch.json 里的 labelpreLaunchTask 只要有一个字不一样,就会连不上。

动手检查

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

立即练习

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