前言
本教程受众:希望能用VSCode来写C/C++的同学们。(其实是给本校ACM实验室的同学们写的)
注意:只针对Windows用户。
教程可能会比较啰嗦,但绝对详细,跟着一步步来可以保证大概率正确。╰(°▽°)╯
约定:
行内代码块
内放一些关键内容(你需要点的操作,按钮的名字等)。粗体字表示你需要注意的内容。
可能会出现的问题,我会放在引用块内,就像这样。
作者水平不够高,如果出现错误还请各位批评指正。
编译器MinGW-w64部署
相关问题:我可以先弄好VSCode再来看这个吗?
当然可以,只要你会弄。
如果你什么都很陌生,我建议你按照我这个一步步来先安装MinGW再配置VSCode。
前置条件
- 联网的电脑。
- 清晰的脑子(有些步骤可以找其他方式,比如下载软件可以去镜像站)。
- 耐心。
下载安装
进入SourceForgeMinGW-w64下载,不要点击绿色下载按钮,下翻找到在线安装器下面的具体版本(这里选用的是
MinGW-W64 GCC-8.1.0
),选择下载链接x86_64-win32-seh
。相关问题:
sjlj/seh/sjlj/seh
这些是什么?可以参考Qt的这篇文章。
相关问题:下载下来的这个东西是啥啊?怎么是图标白色的一块?我怎么打开啊?
注意,下载下来的是一个
.7z
格式的压缩包,如果你没有能相关的解压软件,请去整一个来。(个人使用7-Zip,指路:7-Zip官网)下载完毕后,解压出来,然后把里面的mingw64移动到
C:\Program Files
。相关问题:我解压出来是一个很长的名字的文件夹啊?为什么我移动之后后续操作还是不行?
注意,根据解压方式不同可能会多套一层,点开你的mingw64,如果里面有
bin
文件夹就对了。
如果点开还是个mingw64
,请你拿出来,那个才是。
配置环境变量
装好了吗?装好了之后,打开
mingw64\bin
文件夹,然后复制一下上方路径(是C:\Program Files\mingw64\bin\
)。打开
Windows设置
,进入系统
选项卡,找到最下面的系统信息
,找到高级系统设置
,点开。相关问题:高级系统设置在哪里?
Win11在设备规格点开来,中间相关链接最右边。
Win10可能在右侧几个蓝色划线链接的最下面。点开之后跳出一个系统属性的窗口,最上面选项卡选择
高级
,然后看到右下角环境变量
。在上方的
用户变量
大框中找到Path
,双击打开出现编辑框。相关问题:我双击点开是一个长条的编辑文本怎么办?
你看,咱们有上下两个文本框,在下面文本框的最左端写上
C;
(注意英文分号),点确定,再次双击点开。
恢复成编辑框之后,请选择最上面的C;
这行并删除。点击右上角
新建
按钮,把你的bin的路径粘贴进去,然后点确定
按钮把你这些开起来的窗口全确定了。大功告成,关闭刚才打开的那些文件夹什么的。
VSCode部署
相关问题:我还没装MinGw可以先来看这个吗?
可以,但我建议先看MinGw,就在上面。
相关问题:这不是很ez吗?复制几个文件夹就好?
昂确实我以前都是这么帮别人弄的,直到我后来大概弄清了一点整个环境搭建的思路,用系统提供的内容来配合建立整个.vscode以及相关配置会更安全一些,出了问题也比直接复制各种.json文件要更好解决。当然部分步骤你可以选择性跳过。
前置条件
- 联网的电脑。
- 清晰的脑子(有些步骤可以找其他方式 如果你嫌我麻烦 ,比如下载软件可以去镜像站)。
- 耐心&仔细&耐心&仔细。
下载安装
进入官网下载 VSCode,并安装,安装的时候直接一路选择继续即可。
相关问题:为啥我不能改安装位置啊?以前都可以的
在下载界面,请你选择
System Installer
安装包,蓝色大按钮默认下载User Installer。【可选】安装汉化。
打开VSCode你会发现英文界面,(默认在左侧)左侧找到
Extensions
或者按Ctrl+Shift+X
打开扩展界面。在上方文本框输入
Chinese
,一般第一个就是,点击卡片右下角安装,然后右下角提示你重启。
安装C/C++扩展:打开
扩展
界面,搜索C++
,安装第一个。
建立C/C++编写工作区
在你电脑上找一个位置,创建一个文件夹,名字自己取,保证路径和名字不要出现汉字(概率造成乱码或错误)。
相关问题:我咋知道路径有没有汉字出现?
打开你的文件夹,点击上方文本框,看看有没有。
用 VSCode打开这个文件夹(提示信任问题请选择
是,我信任此作者
):VSCode文件
选项卡->打开文件夹
。侧边栏最上面,是一个
资源管理器
,点开,然后最上面有四个图标,选最左边的新建文件
,创建一个Main.cpp
、一个Main.in
、一个Main.out
。写一段Hello World或者啥的,按
F5
运行,出现调试器的选择,选择g++
。相关问题:F5按了怎么是调屏幕亮度啊?
笔记本可能会整合进功能键,请你改成按
Fn+F5
。相关问题:我头文件为什么会有红色或者蓝色波浪号?
检查你的MinGw是否安装正确。
F5是调试的快捷键,首次调试应该只有编译文件。这时你会看到资源管理器多了个
.vscode
文件夹,下面还有tasks.json
,根目录还有编译生成的二进制文件Main.exe
。这时,侧栏里找到
运行和调试
或者按Ctrl+Shift+D
打开运行和调试,然后选择创建launch.json文件
,出来的选项卡中选择C++(GDB/LLDB)
。然后打开生成
launch.json
,右下角添加配置
,选择C/C++:(gdb)启动
。按照下图修改必要内容,如果需要了解字段的意思,请跳转到之后的内容(选读)。
简单提一下需要修改的字段:program
:执行调试的二进制文件的地址。args
:执行调试附加的参数(我这里主要是写了输入输出重定向,从文本内读取输入,并输出到文本,并且关闭了外置终端的使用)。miDebuggerPath
:GDB的路径,要改为你自己的GDB路径,如果你按照我的操作安装mingw64,可以和我一样写;否则,请你自己填写<你的mingw64绝对路径>\\bin\\gdb.exe
。preLaunchTask
:不默认给出,需要自己添加,添加的时候注意位置以及英文逗号,用于调试之前执行编译操作。(设置后每次F5快捷键调试都会自动先编译再调试)相关问题:这个字段的内容该怎么填写?
填写你的编译任务的label,打开你的
tasks.json
,然后找到label,全文复制(包括双引号),如下图。
填写入launch.json之后样子看下面。
修改前如下图:
修改后如下图:
//附上我的launch.json { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [ "<", "${fileDirname}\\${fileBasenameNoExtension}.in", ">", "${fileDirname}\\${fileBasenameNoExtension}.out" ], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++.exe 生成活动文件" } ] }
步骤 3~8 最难而且也是最容易出错的,请一定要仔细操作。全部完成之后,回到你的
Main.cpp
,F5
编译并调试,会发现输出出现在Main.out
文件内,说明配置完成,恭喜!_(:з」∠)_相关错误:launch: program '……\Main.exe' does not exist
调试时无法找到exe文件,请检查launch.json里面的
preLaunchTask
保证调试前编译。相关错误:preLaunchcTask"build"已终止,退出代码为1。
(大概率,但不是绝对)检查你目前是不是编译(F5)之前按到了不是Main.cpp文件的其他地方,导致激活了别的文件框,这样子F5快捷键编译就会编译其他的文件,而其他文件并不是源文件。
同时,你会看到终端的输出:无法生成和调试,因为活动文件不是 C 或 C++ 源文件。更多错误请自行百度。
(选择性观看) 对于原理的个人简单分析和猜想
前排提示:作者水平不够高,该部分很有可能有着错误之处,有问题的地方还请各位批评指正。
vscode工作区和.vscode
文件夹
VSCode工作区一种组织和管理项目的方式。
工作区是一个包含了一组相关文件和设置的文件夹,它可以帮助开发人员更好地组织和协调项目的开发过程。工作区根目录中会有一个叫做
.vscode
的文件夹,用于存放与项目相关的配置文件和设置。
extensions.json
和插件相关的一些内容,比如工作区的提示、插件的设置等。
launch.json
该文件用于配置项目的调试器。可以定义调试器的类型、启动配置和调试目标等。
下面以我的文件为例。
{ // 指定 launch.json 文件的版本。 "version": "2.0.0", // 包含了一个或多个调试器配置项的数组。在这个示例中,只有一个配置项。 "configurations": [ { // 配置项的名称,用于在 VSCode 中显示调试配置的友好名称。 "name": "C/C++: g++.exe 生成和调试活动文件", // 指定调试器类型。在这个示例中,使用的是 C/C++ 调试器 (cppdbg),适用于调试 C/C++ 代码。 "type": "cppdbg", //指定调试器的请求类型,用于指定调试会话的类型。在这个示例中,使用的是 "launch",表示启动一个新的调试会话。 "request": "launch", // 指定要调试的可执行文件路径,这里使用这些变量构建了可执行文件的路径。 // ${fileDirname} - 当前打开文件所在的目录, ${fileBasenameNoExtension} - 当前打开文件的文件名(不包含扩展名) "program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", // 指定要传递给可执行文件的命令行参数。 // 这里通过 < 和 > 运算符重定向输入输出,将输入文件和输出文件与可执行文件关联起来。 "args": [ "<", "${fileDirname}\\data\\${fileBasenameNoExtension}.in", ">", "${fileDirname}\\data\\${fileBasenameNoExtension}.out" ], // 指定是否在程序入口处暂停执行。在这个示例中,设置为 false,即不会在程序入口处暂停。 "stopAtEntry": false, // 指定调试会话的当前工作目录。${fileDirname} 变量表示当前打开文件所在的目录,因此将当前工作目录设置为当前文件所在的目录。 "cwd": "${fileDirname}", // 指定调试器的环境变量。 "environment": [], // 指定是否在外部控制台中运行调试会话。 // false - 使用VSCode集成中断,true - 使用外部终端 "externalConsole": false, // 指定调试器的模式。在这个示例中,使用的是 gdb 调试器 (gdb)。 "MIMode": "gdb", // 指定 GDB 调试器的路径。 "miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 指定要在调试会话开始时发送给调试器的初始化命令。 "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], // 指定在启动调试会话之前要运行的任务。 // 属性值来自 tasks.json 的 label "preLaunchTask": "C/C++: g++.exe 生成活动文件" } ] }
settings.json
该文件用于存储项目的工作区设置,例如编辑器的首选项、格式化规则、代码提示等。这些设置将仅适用于当前工作区。
tasks.json
该文件用于定义与任务相关的配置,例如构建、运行、测试等。
下面以我的文件为例。
{ // 指定 tasks.json 文件的版本。 "version": "2.0.0", // 包含了一个或多个任务配置项的数组。在这个示例中,只有一个配置项。 "tasks": [ { // 指定任务类型。在这个示例中,使用的是 C/C++ 构建任务 (cppbuild),适用于编译和构建 C/C++ 代码。 "type": "cppbuild", // 指定任务的标签,用于在 VSCode 中显示任务的友好名称。 "label": "C/C++: g++.exe 生成活动文件", // 指定要执行的命令。 "command": "C:\\Program Files\\mingw64\\bin\\g++.exe", // 指定要传递给命令的参数。 "args": [ "-fdiagnostics-color=always", // 在终端中诊断信息是否启用颜色 "-g", // 生成调试信息 "${file}", // 要编译的源代码 "-o", // 指定生成的可执行文件的输出路径,下面这个就是输出路径 "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", "-lstdc++", // 链接C++标准库 "-std=c++17" // 指定使用C++17标准进行编译 ], // 指定任务的选项。 "options": { "cwd": "${fileDirname}" }, // 指定问题匹配器,用于捕获并解析编译过程中的错误和警告。在这个示例中,使用的是 $gcc 问题匹配器,用于匹配 GCC 编译器的输出。 "problemMatcher": [ "$gcc" ], // 指定任务所属的分组。 "group": "build", // 提供任务的详细描述。 "detail": "调试器生成的任务。" } ] }
按照上述配置好之后,按F5调试会发生什么
- VSCode检查是否存在适用的调试配置文件(launch.json、tasks.json等),这些文件定义了调试和构建任务的设置。
- 如果存在launch.json文件,读取调试信息并启动调试会话,并根据配置的启动方式来启动(这里使用了C/C++调试器):
- 根据launch.json中的配置,启动相应的调试器(这里是GDB)。
- 根据launch.json中的配置,执行任务以生成可执行文件(这里通过”preLaunchTask”找到任务的配置信息tasks.json并生成)。
- 根据tasks.json中的配置,执行任务期间根据args中定义的选项和路径编译源代码文件。编译成功后按照指定路径输出,否则在终端报错。
- 根据launch.json中的配置,生成完毕后,根据其中的配置将调试器连接到生成的可执行文件。
- 调试会话开始,可以开始设置断点、单步调试、查看变量等操作。
- 调试完成后,可以在指定文件中查看输出。