您的位置:首页 > 编程语言 > C语言/C++

VSCode下C++环境的配置

2018-03-04 18:36 841 查看

前言

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文件在系统环境变量下,以方便异地调用,如下图



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

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

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

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

插件

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



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

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



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

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





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

配置参数

主要有四个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"
},
}


运行和调试



运行

以下面程序为例



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

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



调试

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



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



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



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

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

后记

Debug小结

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

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

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,很有用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: