VSCode配置避坑指南
前言
以下是vscode的简单配置步骤,主要围绕.vscode文件夹的配置展开,由于网上对于VSCode的安装和MinGW的下载和环境变量的配置教程较多也很简单,本文不再赘述。 第一部分是.vscode文件夹的基础配置,使用此配置文件可以简单编译,运行和调试单文件和多文件的C语言程序,不能实现其他复杂任务 第二部分是.vscode文件夹的进阶配置,增加了C++的支持以及x86,x64以及debug和release模式的切换以及其他一些小功能,如有错误,欢迎指正:)
这是一些VSCode的快捷键以及配置文件时能用到的一些知识
Ctrl+Shift+P — 打开命令面板 Ctrl+Shift+B — 开始执行编译任务
调试相关快捷键: F5 — 启动调试/全速运行到下一个断点 Shift+F5 — 停止 Ctrl+Shift+F5 — 重新运行 F10 — 单步跳过 F11 — 单步进入 Shift+F11 — 单步跳出
${workspaceFolder}
— 在VSCode中打开文件夹的绝对路径 ${workspaceRoot}
— 在VSCode中打开文件夹的绝对路径+文件夹的名字 ${workspaceRootFolderName}
— 在VSCode中打开文件夹的名字 ${file}
— 文件自身的绝对路径 ${fileBasename}
— 当前打开的文件名+后缀名(不包括路径) ${fileBasenameNoExtension}
— 当前打开的文件的文件名(不包括路径和后缀名) ${fileDirname}
— 当前打开的文件所在的绝对路径,不包括文件名 ${fileExtname}
— 当前打开的文件的后缀名 ${relativeFile}
— 相对于${workspaceFolder}
,当前打开的文件路径 ${relativeFileDirname}
— 相对于${workspaceFolder}
,当前打开文件的目录名 ${lineNumber}
— 当前文件光标所在的行号
.vscode文件夹基础配置
c_cpp_properties.json
是用mingw编译的配置文件 下面是参考配置
1 | { |
tasks.json
是VSCode运行编译任务时的一些配置,要注意单文件和多文件的配置不同, 下面将分别给出说明
1 | //单文件tasks.json |
多文件编译要把所有文件放到一个文件夹内 .c/.cpp文件可以建一个src
文件夹 .h文件可以建一个inc
文件夹
1 | //多文件tasks.json |
launch.json
是VSCode的调试配置文件,如果没有在调试界面点击生成即可,进入launch.json
后右下角点击添加配置,选择gdb调试,自动生成模板后内容如下,单文件和多文件配置一致,因为都是生成一个exe文件
1 | { |
基础配置不包含程序的运行,若要运行可以在VSCode中用PowerShell运行,但需要注意用powershell运行程序时必须先cd到该程序所在的文件夹(不能是父文件夹)不然会报错
.vscode文件夹进阶配置
- x86和x64编译的切换 在
c_cpp_properties.json
中添加Win64编译选项``
1 | { |
tasks.json中添加x64编译任务
1 | { |
- debug和release的切换以及代码优化水平的设置 -g — 用于生成调试信息,也就是debug模式 -O1 — 代码优化水平1 -O2 — 代码优化水平2 O1和O2都是属于release模式,代码优化水平O1<O2 -o — 指定输出文件名称,后面接要输出文件的路径和名称
- debug时自动编译 在
launch.json
中加入"preLaunchTask":"build"
表示在调试前先执行编译任务,值与task中的label
对应 - 默认启动项 在
tasks.json
中的group
里加入"inDefault": true
表示该task为默认项,只能有一个默认 task否则全部当非默认处理 - build后直接run 在
tasks.json
中加入一个新任务,增加dependsOn: "build"
和"command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe
其中"dependsOn"
表示任务依赖,表示运行这个任务前要先执行build任务,也就是编译,名称和编译任务"label"
值对应"command"
中执行exe文件,位置要与build任务中exe的生成位置相同 - 执行task时光标位置设定 在
tasks.json
的"presentasion"
里添加"focus": true
,表示在执行task时光标在终端,方 便进行输入,但对于build任务意义不大,在执行run任务时可以改为true - debug默认在main函数入口处停下 在
launch.json
中加入"stopAtEntry": true
,相当于在main上打断点 - 中文乱码情况的解决 在
args
中添加"-fexec-charset=GB18030"
使文件以GB18030编码
这里提一下GB2312,GB18030,GBK编码的区别 GB2312是第一个汉字编码的国家标准,GBK是GB2312的升级版,增加了更多的字符,而GB18030则是GBK的升级版,兼容Unicode编码,所以用GB18030更好
- C++编译的两种方法
- 方法一:把原先的gcc换成g++就可以自动链接标准库
- 方法二:在C语言编译task的基础上,在
args
中加入"-lstdc++"
,这样就可以在用gcc编译时连接C++标准库,编译C语言也不受影响,值得注意的是"-lstdc++"
在args
中的位置,args
是从上至下执行命令,"-lstdc++"
不能在寻找源文件之前运行,否则会报错,所以添加在o
找到源文件之后
1 | "args": [ |
tasks.json
中"presentation"
设置详解"echo"
— 该设置控制任务的输出是否在 VSCode 终端中显示。当设置为true
时,任务输 出将显示在终端中;当设置为false
时,任务输出将不显示在终端中"reveal"
— 该设置控制任务输出是否在终端中打开。当设置为always
时,每次任务运行 时,终端都会自动打开;当设置为silent
时,终端不会自动打开,除非手动打开;当设置为never
时,终端始终不打开"focus"
— 该设置控制在任务运行时是否激活终端。当设置为true
时,终端窗口将自动激 活;当设置为 false 时,终端窗口不会自动激活"panel"
— 该设置控制任务输出是否与其他任务共享终端面板。当设置为shared
时,任务 输出将与其他任务共享同一个终端面板;当设置为dedicated
时,任务输出将在一个单独的终端面板中显示,不与其他任务共享
下面给出完整文件
c_cpp_properties.json
1 | { |
tasks.json
1 | { |
launch.json
1 | { |
2023.2.10 NianLee