[debug] VSCode C/C++ Win10 相关基础编译环境配置

VSCode的配置(基于Win10)

VSCode支持多语言,并且轻量美观,是我们理想的IDE典范。
但它对C++其实并没有我们想象的这么友好,这里简单地梳理一下将VSCode从0开始打造成C++神器的过程。

  • T i p s : Tips: Tips
    1. 为了减小文件的大小,图片均通过有道云链接的形式给出。//毕竟绝大多数可以不看。
    2. 文中的超链接除两处网址,其余全为安装过程的图片附释。除MinGW中配置图外,其他可以不必查看。
    3. 要按照顺序执行。//否则到第五步时可能会绝望地重头再来。

主要步骤

  1. Visual Studio Code官网上下载。然后点击那个蓝色按钮下载。
  2. 下载MinGW。(如果很慢也可以在清华Tuna的镜像网站上找到OSDN的镜像)
  3. 配置相关环境变量
  4. 安装相关插件并配置.json文件
  5. 可以开始快乐的Coding啦!

MinGW的下载、安装与配置

Minimalist GNU for Windows,所以再说一遍,这是Win10的配置啊~(Mac我也不会)

  1. 下载后依照不同浏览器特性选择‘保留’或者‘运行’。

  2. 点击install会显示安装Installation Manager Setup Tool界面,将地址设置为C:\MinGW

    (务必安装在C盘根,因为这篇说明时依据C盘安装的)。

    点击continue后等待。完成后点击continue.

  3. 在manager界面左栏中顺次点击(也可依据图示打开)All Packages-MinGW-MinGW Base System,进入编译器配置,勾选如图的变量:

    • mingw32-binutils-bin
      mingw32-gcc-bin
      mingw32-gcc-dev
      mingw32-gcc-doc
      mingw32-gcc-man
      mingw32-gcc-g+±bin
      mingw32-gcc-g+±dev
      mingw32-gcc-g+±doc
      在Source-Level Debugger选项下勾选
      mingw32-gdb-bin

勾选后选择Installation-Apply Changes,稍加等待.

配置环境变量

  1. 在Windows全局搜索中输入“环境变量”,打开相应设置
  2. 依照如图顺序新建一个环境,如果刚刚没有安装在C盘根下的话,依据实际位置新建即可,但强烈不建议,因为在后面的.json文件是按照C盘编写的。
  3. 依次点击确定,保存设置

VSCode相关配置

  1. 在文件资源管理器(Explorer)中建立文件夹WORKSPACE(这将作为工作区的名字出现,为了不影响VSCode的系统外(逼)观(格),自定义名字请谨慎。

    另外,不管是哪一层文件夹或者文件名都不要使用中文,否则会在编译过程中报错。

  2. 重新打开VSCode,使用快捷键’‘Ctrl+O’'找到刚刚新建的workspace并打开。
  3. 点击侧栏Extensions,或使用快捷键’‘Ctrl+Shift+X’’,搜索C++。如果需要可以在此搜索’‘language pack’'并安装中文插件,重启后生效。

配置.json文件

先在工作区下,建立.vscode文件夹如图
现在新建相关配置文件,复制并保存:
launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole":true,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
            "preLaunchTask": "g++",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

这里将外部控制台设置为true,与VS风格和使用方法类似。

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "g++",
            "type": "shell",
            "command": "C:\\MinGW\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-include",
                "${workspaceRoot}\\.vscode\\head.h",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "options": {
                "cwd": "C:\\MinGW\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}


你可以在上面这个文件的"args"选项中加入自定义预编译命令,格式为"-D XXX","XXX"是自定义的宏,如果能用得上的话。

    "args": [
        // "-g",
        // "${file}",
        // "-include",
        // "${workspaceRoot}\\.vscode\\head.h",
        // "-o",
        // "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "-D 宏名",
    ],

然后利用预编译命令#ifdef - #endif,就可以实现代码块在本地编译运行而在OJ上不运行,可以极大的优化debug体验。也可以将文件输入输出流装在这样的代码块中,后面会说到另一种方法。

settings.json

{
    "files.associations": {
        "ostream": "cpp",
        "iostream": "cpp",
        "random": "cpp",
        "cstring": "cpp",
        "*.tcc": "cpp",
        "exception": "cpp",
        "istream": "cpp",
        "sstream": "cpp",
        "charconv": "cpp",
        "future": "cpp",
        "type_traits": "cpp",
        "vector": "cpp",
        "xiosbase": "cpp",
        "xlocale": "cpp",
        "xhash": "cpp",
        "xlocbuf": "cpp",
        "xstring": "cpp",
        "array": "cpp",
        "chrono": "cpp",
        "string": "cpp",
        "unordered_map": "cpp",
        "algorithm": "cpp",
        "functional": "cpp",
        "memory": "cpp",
        "optional": "cpp",
        "ratio": "cpp",
        "system_error": "cpp",
        "tuple": "cpp",
        "cmath": "cpp",
        "fstream": "cpp",
        "numeric": "cpp",
        "scoped_allocator": "cpp",
        "thread": "cpp",
        "regex": "cpp",
        "utility": "cpp",
        "deque": "cpp",
        "filesystem": "cpp",
        "forward_list": "cpp",
        "list": "cpp",
        "map": "cpp",
        "queue": "cpp",
        "set": "cpp",
        "stack": "cpp",
        "unordered_set": "cpp",
        "xlocmon": "cpp",
        "xmemory": "cpp",
        "xtr1common": "cpp",
        "xtree": "cpp",
        "xutility": "cpp",
        "csetjmp": "cpp",
        "complex": "cpp",
        "limits": "cpp",
        "iosfwd": "cpp",
        "xlocnum": "cpp",
        "xloctime": "cpp",
        "bitset": "cpp",
        "streambuf": "cpp",
        "valarray": "cpp",
        "codecvt": "cpp",
        "iomanip": "cpp",
        "iterator": "cpp",
        "*.rh": "cpp",
        "cstdio": "cpp"
    },
    "C_Cpp.dimInactiveRegions": true,
    "C_Cpp.errorSquiggles": "Enabled"
}

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\MinGW\\bin\\g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

head.h

#include <stdlib.h>
#include <stdio.h>
static void before(void) __attribute__((constructor));
static void after(void) __attribute__((destructor));
static void middle(void);
static void before()
{
    system("chcp 65001"); //切换字符集
    system("cls");
}

如果习惯VS风格的,这个文件已经够用了。
但如果想让外部控制台成为Dev风格,可以在后面加

static void after()
{
    system("pause");
}

下面这一段如果不感兴趣可以跳过。
一个debug方法,在学长的基础上利用文件方法,删减了使用snippet的麻烦:

  • 三窗口自动debug:可以在head文件的before和after段落中加入相应的文件流语句,debug时只需将测试数据一次键入输入文件’.in’,然后就可以在’.out’文件中连续查看输出结果,成品head文件如下:
#include <stdlib.h>
#include <stdio.h>
static void before(void) __attribute__((constructor));
static void after(void) __attribute__((destructor));
static void middle(void);
static void before()
{
    system("chcp 65001"); //切换字符集
    system("cls");
    freopen("文件名", "r", stdin);
    freopen("文件名", "w", stdout);
}
static void after()
{
    fclose(stdin);
    fclose(stdout);
    system("pause");
}

大功基本告成,还是要用实际编译运行检验配置是否无误。

建立文件和文件夹之前,我们可以用首选项设置快捷键,VSCode没有默认新建快捷键,当初从VS过来时感到很不快。既然没有默认,按照个人喜好即可。

  1. 新建文件夹

    北大传统是把第一个文件夹命名为poj。

  2. 在这个文件夹下新建一个文件,类型为‘.cpp’.
  3. 输入一段代码,按下F5,自此就开启了愉快的VSCoding之旅.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值