前言

VSCode是微软开发的一款免费的跨平台的编辑器。其拥有较好的性能和前端视觉,并且支持Debugging、Git、IntelliSense、和各种extensions。

本文介绍的是windows系统下VSCode C++环境的配置,包括运行和调试。

我的系统版本号是10.0.16299.192 VSCode版本号为1.20.1

编译器

可以选择LLVM、MinGW32、MinGW64、Tdm-gcc等主流编译环境的其中一个。其中LLVM前端(词法、语法分析、语义分析、生成中间代码)使用的是clang,效率上优于后面三个所使用的gcc。

我下面使用的是tdm-gcc 官网下载 选择tdm64-gcc(64位系统)

下载完毕后保证其文件夹下的bin文件在系统环境变量下,以方便异地调用,如下图

img

对环境变量的设置有问题的可以百度

如果有对编译效率的追求,可以使用clang编译器,(即LLVM的环境) 但是Clang没有头文件,需要额外去加上,具体我没有去研究,所以这里直接使用了tdm-gcc

还要指出的是,VSCode不适合做项目,只适合平常的语法、算法练习。所以编译效率不是这么的重要了

如果需要做项目还是推荐Visual Studio啦

插件

微软官网有一款插件C/C++ ,我们的配置是基于这个插件的

img

支持对C/C++ 的IntelliSence,debugging,code browsing

下面是官方对IntelliSence的简短介绍

img

基于变量类型,函数定义和导入模块的智能完成

为了提升效率,我还使用了下面的插件

img

img

当然这两个可以不必选择,或者说还有其他许多插件,自行选择,怎么顺手怎么来

配置参数

主要有四个json文件,在.vscode文件下

其中launch.json和tasks.json是必要的,更改需谨慎

c_cpp_properties.json和settings.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}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [],                                 // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false,                       // 设为true时程序将暂停在程序入口处,一般设置为false
            "cwd": "${workspaceRoot}",                  // 调试程序时的工作目录,一般为${workspaceRoot}
            "externalConsole": true,                    // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "internalConsoleOptions": "neverOpen",      // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡",
            "MIMode": "gdb",                            // 指定连接的调试器
            "miDebuggerPath": "C:/TDM-GCC-64/bin/gdb64.exe", // 调试器路径
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for GDB",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" 
        }
    ]
}
tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile",
            "command": "g++",
            "args": [
                "-g ${file}",   //指定编译源代码文件                    
                "-o ${fileDirname}/${fileBasenameNoExtension}.exe", // 指定输出文件名,不加该参数则默认输出a.exe
                "-ggdb3",   // 生成和调试有关的信息
                "-Wall",    // 开启额外警告
                "-static-libgcc",   // 静态链接
                "-std=c++17",       // 使用最新的c++17标准
                "-Wno-format",
                "-finput-charset=UTF-8",//输入编译器文本编码 默认为UTF-8
                "-fexec-charset=GBK"//编译器输出文本编码 自行选择
            ],

            "type": "shell",

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

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

            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": [
                    "relative", "\\"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}
c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Win32",
            "intelliSenseMode": "clang-x64",
            "includePath": [
                "${workspaceFolder}",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/x86_64-w64-mingw32",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/backward",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include",
                "C:/TDM-GCC-64/x86_64-w64-mingw32/include",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include-fixed"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "__GNUC__=7",
                "__cdecl=__attribute__((__cdecl__))"
            ],
            "browse": {
                "path": [
                "${workspaceFolder}",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/x86_64-w64-mingw32",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/backward",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include",
                "C:/TDM-GCC-64/x86_64-w64-mingw32/include",
                "C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include-fixed"
                ]
            },
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    ],
    "version": 3
}
settings.json
{
    "window.zoomLevel": 1,
    "editor.snippetSuggestions": "top",
    "editor.minimap.renderCharacters": false,
    "editor.formatOnPaste": true,
    "editor.formatOnType": true,
    "editor.wordWrap": "on",

    "C_Cpp.clang_format_sortIncludes": true,
    "[cpp]": {
        "editor.quickSuggestions": true
    },
    "[c]": {
        "editor.quickSuggestions": true
    },
    "problems.decorations.enabled": true,
    "C_Cpp.intelliSenseEngineFallback": "Enabled",
    "files.associations": {
        "*.cfg": "ini",
        "*.fsh": "glsl",
        "stack": "cpp",
        "iostream": "cpp",
        "ostream": "cpp",
        "*.tcc": "cpp",
        "cctype": "cpp",
        "clocale": "cpp",
        "cmath": "cpp",
        "cstdint": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "exception": "cpp",
        "initializer_list": "cpp",
        "iosfwd": "cpp",
        "istream": "cpp",
        "limits": "cpp",
        "new": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "system_error": "cpp",
        "type_traits": "cpp",
        "typeinfo": "cpp",
        "utility": "cpp"
    },
}

运行和调试

img

运行

以下面程序为例

img

press ctrl+F5 直接编译并运行程序(记得程序末尾加system pause)

win的这个输出终端窗口采用的编码是GDK的

img

调试

还以下面程序为例,安排3个断点,pressF5 开始调试 程序会停止在第一个断点

img

press F10单步跳过 F11单步调试(会进入函数内部)

img

左侧可以看到Locals和设置监视

img

调试控制台中可以看到相关的信息

至此完成了基本的运行和调试

后记

Debug小结

press ctrl+F5 直接编译并运行程序

pressF5 开始调试(如设置了断点则会停在断点处,如没设置,则会直接退出调试)

press F10单步跳过 F11单步调试(会进入函数内部)

关于编码

我的VSCode默认编码是UTF-8 因此我在VSCode里新建编辑的文件将会以这种编码方式将信息存储

但各式各样的文件,编码形式太多了,VSCode带有自动检测编码功能(但有时候检测不准确)

上面tasks.json 文件中,建议采用

“-finput-charset=UTF-8” //输入编译器文本编码 默认为UTF-8

“-fexec-charset=GBK” //编译后的输出格式

这样在输出终端中可以正常显示

如果要写到文件中,注意下编辑器的编码格式就行

另外,windows自家的记事本默认采用的是UTF-8 withbom 格式进行编码的 建议采用UTF-8 withoutbom的编辑器进行日常编辑,更为主流些吧。

错误

以上配置参数难免有不妥之处,欢迎实践后的朋友进行交流//在下面评论区留言

参考

https://code.visualstudio.com/docs/languages/cpp

上面的网址是微软官方的docs,很有用

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐