问题分析

实在不想用devcpp了,太垃圾了,又丑又难用

对于我那性能底下的macboook air只能配置sublime才凑合用了,但是主机或者我这台17r4VScode是没有问题的。至于说vscodesublime的差别,我觉得对于写算法这种东西来说没有区别,毕竟拿一个写字板都能完成的工作,但是我偶尔还需要写一些python的东西,所以直接用vscode或许是最优解。

很多人说vscode内存泄露的,到目前为止的最新版本好像已经修复了这个问题,皆大欢喜皆大欢喜。

东西

综述

步骤较多我怕劝退大家,所以避免be panic我决定还是单独写一下思路

  • 安装mingw64或者clang $\Rightarrow$ C++编译器
  • 修改vscode下的代码编译属性 $\Rightarrow$ GCD调试
  • 修改vscode中的code runner插件 $ \Rightarrow $ 一般编译并在vscode的shell窗口中直接进行std i/o

安装完后,所有的.exe文件会在文件夹/build下,如果g++报错,请在目录下先建立/build文件夹

具体步骤

安装mingw64或者clang

根据系统来吧,对于Windows还是装mingw64比较方便,linux或者macclang

mingw64的服务器是真的炸,千万别用在线,坐了飞机到国外也贼慢,我直接给出安装地址吧

百度云地址

安装选项:

选项 推荐选择 备注
Architecture x86_64 i686是为了小算力的设备打造的,不管你是几位的操作系统选择推荐的就行了
Threads win32 win32支持windows特殊指令,特殊指令只能部署在windows上年,posix可以部署在所有系统上)话说又不写c++工程关注这个干什么
Exception sjlj 看名字就知道是负责异常处理的,seh有一个玄学加速,sjlj更加稳定。但是对竞赛无用所以选拿个都行。记住你是为了竞赛不是工程)选个稳定的或许更好
Build revision default value 就是自带什么选什么就行了,)我这个蒟蒻并不知道里面的差别

调试VScode 实现GDB调试

安装VScode就不需要我多说了吧,装完之后在插件那里安装C++Code Runner

打开你的常写代码的文件夹(VScode里可以设置全局也可以设置单独文件夹(工作区)为了避开对python的影响,我下面的部署文件全在代码文件夹下)

在文档下新建一个test.cpp文件,按F5此时会报出很多错不要怕,这一步是为了让VScode把配置文件的模板安装出来

配置launch.json

如果没有自行新建一个

// launch.json
{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "C++ Launch (GDB)",                 // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg",                           // 配置类型,这里只能为cppdbg
            "request": "launch",                        // 请求配置类型,可以为launch(启动)或attach(附加)
            "targetArchitecture": "x64",                // 生成目标架构,一般为x86或x64
            "program": "${fileDirname}/build/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [ ],                                 // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false,                       // 设为true时程序将暂停在程序入口处,一般设置为false
            "cwd": "${fileDirname}/",                  // 调试程序时的工作目录,一般为${workspaceRoot}
            "externalConsole": true,                    // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "internalConsoleOptions": "neverOpen",      // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡",
            "MIMode": "gdb",                            // 指定连接的调试器
            "miDebuggerPath": "D:/mingw64/bin/gdb.exe", // ***选择正确的调试器路径***
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for GDB",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" 
        }
    ]
}

请务必按照代码注释完成配置文件的修改

主要修改的是调试器路径(17行),文件名不要改,就修改路径即可

配置 Task.jason 文件

如果没有自行新建即可

// tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile",
            "command": "g++",
            "args": [
                "${file}",   // 指定编译源代码文件
                "-o",
                "${fileDirname}/build/${fileBasenameNoExtension}.exe", // 指定输出文件名,不加该参数则默认输出a.exe
                "-O2",      // 优化级别
                "-ggdb3",   // 生成和调试有关的信息
                "-Wall",    // 开启额外警告
                "-static-libgcc",   // 静态链接
                "-std=c++14",       // 使用c++17标准
                "-finput-charset=UTF-8",    //输入编译器文本编码 默认为UTF-8
                "-fexec-charset=GB18030",   //输出exe文件的编码
                "-D _USE_MATH_DEFINES"
            ],

            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": [
                    "absolute",
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            },

            "type": "shell",

            "group": {
                "kind": "build",
                "isDefault": true
            },

            "presentation": {
                "echo": true,
                "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never
                 "focus": false,
                 "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
        }
    ]
}

请务必按照代码注释完成配置文件的修改

主要修改编译 (类似-Wall)选项,其他的根据注释量力修改

配置CodeRunner插件实现非调试模式的编译

先直接用codeRunner运行,生成配置文件,会报错,不要慌

配置settings.json

如果没有自己手动新建,仍然在文件夹/.vscode

{
    // 在终端中运行编译命令,否则我们无法与程序通过标准输入交互
    "code-runner.runInTerminal": true,
    // 开启这个后在运行编译命令之前会自动 cd 至文件所在目录
    "code-runner.fileDirectoryAsCwd": true,
    // 因为上面那个选项会自动 cd,所以我删除了默认编译命令中的 cd 语句
    // 同时我将编译结果的输出目录修改为了同目录下的 build 文件夹
    // 不然源码文件和编译结果混杂在一个目录中非常杂乱(尤其是刷题时)
    // 这里只保留了 C 和 C++ 的编译命令,有需要其他语言的请自行添加
    "code-runner.executorMap": {
        "c": "gcc $fileName -o build/$fileNameWithoutExt.exe && .\\build\\$fileNameWithoutExt.exe",
        "cpp": "g++ $fileName -o build/$fileNameWithoutExt.exe -Wall -O2 -static-libgcc -std=c++14 -finput-charset=UTF-8 && .\\build\\$fileNameWithoutExt.exe",
    },
    // 运行代码后切换焦点至终端,方便直接输入测试数据
    "code-runner.preserveFocus": false,
    // 在运行代码之前保存文件
    "code-runner.saveFileBeforeRun": true

}

请务必按照代码注释完成配置文件的修改

无特殊需求直接粘贴即可

配置c_cpp_properties.json

如果没有自行新建

{
    "configurations": [
        {
            "name": "MinGW64",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "D:/mingw64/bin/g++.exe",
            "includePath": [
                "${workspaceFolder}"
            ],
            "cppStandard": "c++14"
        }
    ],
    "version": 4
}

请务必按照代码注释完成配置文件的修改

主要修改第六行的编译器 路径

修改快捷键

VScode中点开 文件->首选项 -> 按键映射

F5绑定给CodeRunner (从Ctrl+N改成F5)

Ctrl+F5绑定给`VScode默认即可

1563081314838

大功告成

  • 按下F5直接在VScodeShell中运行
  • 设置断点后按下Ctrl+F5会弹出窗口,同时VScodeDebug区域出现对应值

对了这样实现的编译是不会记录运行时间和按一下关闭的,唯一简单的解决办法就是自己在std::main()返回前做出下面的语句

#include
#include

int mian(){

    puts((double)(finish - start) / CLOCKS_PER_SEC);
    system("pause"); 
    return 0;
}

如果觉得时间不重要的话那么就删了他

#include

int main(){

    system('pause');
    return 0;
}

如果你还是有问题的话,可以到我的github上面看一看

GitHub链接