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进行一些习惯的设置,可自由更改
{
"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"
}
]
}
{
"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
}
}
}
]
}
{
"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
}
{
"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个断点,pressF5
开始调试 程序会停止在第一个断点
press F10
单步跳过 F11
单步调试(会进入函数内部)
左侧可以看到Locals和设置监视
调试控制台中可以看到相关的信息
至此完成了基本的运行和调试
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,很有用