前言

  1. 本教程受众:希望能用VSCode来写C/C++的同学们。(其实是给本校ACM实验室的同学们写的)

  2. 注意:只针对Windows用户

  3. 教程可能会比较啰嗦,但绝对详细,跟着一步步来可以保证大概率正确。╰(°▽°)╯

  4. 约定

    1. 行内代码块内放一些关键内容(你需要点的操作,按钮的名字等)。

    2. 粗体字表示你需要注意的内容。

    3. 可能会出现的问题,我会放在引用块内,就像这样。

  5. 作者水平不够高,如果出现错误还请各位批评指正。

编译器MinGW-w64部署

相关问题:我可以先弄好VSCode再来看这个吗?

当然可以,只要你会弄。
如果你什么都很陌生,我建议你按照我这个一步步来先安装MinGW再配置VSCode。

前置条件

  1. 联网的电脑。
  2. 清晰的脑子(有些步骤可以找其他方式,比如下载软件可以去镜像站)。
  3. 耐心。

下载安装

  1. 进入SourceForgeMinGW-w64下载,不要点击绿色下载按钮,下翻找到在线安装器下面的具体版本(这里选用的是 MinGW-W64 GCC-8.1.0),选择下载链接x86_64-win32-seh

    相关问题:sjlj/seh/sjlj/seh这些是什么?

    可以参考Qt的这篇文章

    相关问题:下载下来的这个东西是啥啊?怎么是图标白色的一块?我怎么打开啊?

    注意,下载下来的是一个.7z格式的压缩包,如果你没有能相关的解压软件,请去整一个来。(个人使用7-Zip,指路:7-Zip官网

  2. 下载完毕后,解压出来,然后把里面的mingw64移动到C:\Program Files

    相关问题:我解压出来是一个很长的名字的文件夹啊?为什么我移动之后后续操作还是不行?

    注意,根据解压方式不同可能会多套一层,点开你的mingw64,如果里面有bin文件夹就对了。
    如果点开还是个mingw64,请你拿出来,那个才是。

配置环境变量

  1. 装好了吗?装好了之后,打开mingw64\bin文件夹,然后复制一下上方路径(是C:\Program Files\mingw64\bin\)。

  2. 打开Windows设置,进入系统选项卡,找到最下面的系统信息,找到高级系统设置,点开。

    相关问题:高级系统设置在哪里?

    Win11在设备规格点开来,中间相关链接最右边
    Win10可能在右侧几个蓝色划线链接的最下面。

  3. 点开之后跳出一个系统属性的窗口,最上面选项卡选择高级,然后看到右下角环境变量

  4. 在上方的用户变量大框中找到Path,双击打开出现编辑框。

    相关问题:我双击点开是一个长条的编辑文本怎么办?

    你看,咱们有上下两个文本框,在下面文本框的最左端写上C;(注意英文分号),点确定,再次双击点开。
    恢复成编辑框之后,请选择最上面的C;这行并删除。

  5. 点击右上角新建按钮,把你的bin的路径粘贴进去,然后点确定按钮把你这些开起来的窗口全确定了。

  6. 大功告成,关闭刚才打开的那些文件夹什么的。

VSCode部署

相关问题:我还没装MinGw可以先来看这个吗?

可以,但我建议先看MinGw,就在上面。

相关问题:这不是很ez吗?复制几个文件夹就好?

昂确实我以前都是这么帮别人弄的,直到我后来大概弄清了一点整个环境搭建的思路,用系统提供的内容来配合建立整个.vscode以及相关配置会更安全一些,出了问题也比直接复制各种.json文件要更好解决。当然部分步骤你可以选择性跳过。

前置条件

  1. 联网的电脑。
  2. 清晰的脑子(有些步骤可以找其他方式 如果你嫌我麻烦 ,比如下载软件可以去镜像站)。
  3. 耐心&仔细&耐心&仔细。

下载安装

  1. 进入官网下载 VSCode,并安装,安装的时候直接一路选择继续即可。

    相关问题:为啥我不能改安装位置啊?以前都可以的

    在下载界面,请你选择System Installer安装包,蓝色大按钮默认下载User Installer

  2. 【可选】安装汉化。

    1. 打开VSCode你会发现英文界面,(默认在左侧)左侧找到Extensions或者按Ctrl+Shift+X打开扩展界面。

    2. 在上方文本框输入Chinese,一般第一个就是,点击卡片右下角安装,然后右下角提示你重启。

  3. 安装C/C++扩展:打开扩展界面,搜索C++,安装第一个。

建立C/C++编写工作区

  1. 在你电脑上找一个位置,创建一个文件夹,名字自己取,保证路径和名字不要出现汉字(概率造成乱码或错误)

    相关问题:我咋知道路径有没有汉字出现?

    打开你的文件夹,点击上方文本框,看看有没有。

  2. 用 VSCode打开这个文件夹(提示信任问题请选择是,我信任此作者):VSCode文件选项卡->打开文件夹

  3. 侧边栏最上面,是一个资源管理器,点开,然后最上面有四个图标,选最左边的新建文件,创建一个Main.cpp、一个Main.in、一个Main.out

  4. 写一段Hello World或者啥的,按F5运行,出现调试器的选择,选择g++

    相关问题:F5按了怎么是调屏幕亮度啊?

    笔记本可能会整合进功能键,请你改成按Fn+F5

    相关问题:我头文件为什么会有红色或者蓝色波浪号?

    检查你的MinGw是否安装正确。

  5. F5是调试的快捷键,首次调试应该只有编译文件。这时你会看到资源管理器多了个.vscode文件夹,下面还有tasks.json,根目录还有编译生成的二进制文件Main.exe

  6. 这时,侧栏里找到运行和调试或者按Ctrl+Shift+D打开运行和调试,然后选择创建launch.json文件,出来的选项卡中选择C++(GDB/LLDB)

  7. 然后打开生成launch.json,右下角 添加配置,选择C/C++:(gdb)启动

  8. 按照下图修改必要内容,如果需要了解字段的意思,请跳转到之后的内容(选读)。
    简单提一下需要修改的字段:

    1. program:执行调试的二进制文件的地址。

    2. args:执行调试附加的参数(我这里主要是写了输入输出重定向,从文本内读取输入,并输出到文本,并且关闭了外置终端的使用)。

    3. miDebuggerPath:GDB的路径,要改为你自己的GDB路径,如果你按照我的操作安装mingw64,可以和我一样写;否则,请你自己填写<你的mingw64绝对路径>\\bin\\gdb.exe

    4. 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 生成活动文件"
            }
        ]
    }
    
  9. 步骤 3~8 最难而且也是最容易出错的,请一定要仔细操作。全部完成之后,回到你的Main.cppF5编译并调试,会发现输出出现在Main.out文件内,说明配置完成,恭喜!_(:з」∠)_

  10. 相关错误:launch: program '……\Main.exe' does not exist

    调试时无法找到exe文件,请检查launch.json里面的preLaunchTask保证调试前编译。

    相关错误:preLaunchcTask"build"已终止,退出代码为1。

    (大概率,但不是绝对)检查你目前是不是编译(F5)之前按到了不是Main.cpp文件的其他地方,导致激活了别的文件框,这样子F5快捷键编译就会编译其他的文件,而其他文件并不是源文件。
    同时,你会看到终端的输出:无法生成和调试,因为活动文件不是 C 或 C++ 源文件

    更多错误请自行百度。

(选择性观看) 对于原理的个人简单分析和猜想

前排提示:作者水平不够高,该部分很有可能有着错误之处,有问题的地方还请各位批评指正。

vscode工作区和.vscode文件夹

VSCode工作区一种组织和管理项目的方式。
工作区是一个包含了一组相关文件和设置的文件夹,它可以帮助开发人员更好地组织和协调项目的开发过程。

工作区根目录中会有一个叫做.vscode的文件夹,用于存放与项目相关的配置文件和设置。

  1. extensions.json

    和插件相关的一些内容,比如工作区的提示、插件的设置等。

  2. 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 生成活动文件"
            }
        ]
    }
    
  3. settings.json

    该文件用于存储项目的工作区设置,例如编辑器的首选项、格式化规则、代码提示等。这些设置将仅适用于当前工作区。

  4. 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调试会发生什么

  1. VSCode检查是否存在适用的调试配置文件(launch.json、tasks.json等),这些文件定义了调试和构建任务的设置。
  2. 如果存在launch.json文件,读取调试信息并启动调试会话,并根据配置的启动方式来启动(这里使用了C/C++调试器):
    1. 根据launch.json中的配置,启动相应的调试器(这里是GDB)。
    2. 根据launch.json中的配置,执行任务以生成可执行文件(这里通过”preLaunchTask”找到任务的配置信息tasks.json并生成)。
    3. 根据tasks.json中的配置,执行任务期间根据args中定义的选项和路径编译源代码文件。编译成功后按照指定路径输出,否则在终端报错。
    4. 根据launch.json中的配置,生成完毕后,根据其中的配置将调试器连接到生成的可执行文件。
  3. 调试会话开始,可以开始设置断点、单步调试、查看变量等操作。
  4. 调试完成后,可以在指定文件中查看输出。