宇宙最强编辑器VS Code(四)
0.专栏回顾
1.前言
1.1.关于编译工具链
VS Code是一个轻量级工具,适合于简单的编辑、编译、运行C/C++文件,特别是在学习C/C++语言的时候;
如果需要开发C/C++项目,建议选择使用宇宙第一 IDE——Visual Studio。
1.2.关于C/C++扩展
Microsoft的C/C++扩展是针对C/C++代码编辑的,其中包括:
C/C++代码智能感知;
C/C++代码调试(需要配合已安装的调试器);
C/C++代码浏览;
需要注意,C/C++扩展不包括C/C++编译器和调试器,需要在电脑上提前安装C/C++编译工具链,目前主流的有:
Windows平台:MinGW-W64
(http://www.mingw-w64.org)
Mac平台:Clang
(http://clang.llvm.org)
Linux平台:Gcc
(http://gcc.gnu.org)
在本文中我们使用MinGW-W64编译工具链,其简介及安装方法请自行百度(文章已写好,为了减小篇幅删减了,如果有需要请留言,明天在公众号会发出)。
2.安装C/C++扩展
在VScode扩展 市场搜索C/C++
,点击安装即可:
3.创建工作区
VS Code以文件夹作为工作区,所以创建工作区有两种方式:
在Windows命令行进入文件夹,使用命令
code .
打开文件夹,创建工作区;先打开VS Code,然后使用VS Code打开文件夹,创建工作区;
这里我创建一个c_project
文件夹并在VS Code打开作为工作区:
4.编辑代码
在工作区中添加文件helloworld.c
,并编辑如下代码:
int main(void)
{
printf("Hello World.\n");
system("pause");
return 0;
}
在编辑代码时,因为安装了C/C++扩展,所以有如下的功能:
代码智能感知
窥视定义(将鼠标放置在符号上,按
Alt+F12
):查看定义(按下
Ctrl
,然后点击符号):
5. 编译调试设置
5.1.配置编译器路径
使用
Ctrl+Shift+P
打开命令面板,输入C/C++
,推荐列表中有UI方式和JSON格式的两种编辑配置方式,如图(这里我们选择Edit configurations(JSON)
):VS Code会自动在工作区中的
.vscode
目录下创建c_cpp_properties.json
文件,这个文件是一个JSON格式文件,用来指定编译器路径,其原始内容如下:如果程序中包含不在当前工作区或者标准库路径中的头文件,需要在
includepath
一项中设置;compilerPath
一项应该配置为当前系统中gcc编译器(如果是c++文件,则为g++编译器)所在的路径,比如我的电脑上已经安装了MinGW-W64
,则路径应为:
C:\\mingw64\\bin\\gcc.exe
cStandard
和cppStandard
用于选择编译器使用的C/C++语言标准,这里我们使用最新的c11
;intelliSenseMode
是IntelliSense功能的设置,这里我们设置为gcc-x64
,有助于IntelliSense功能根据编译器所在的路径来自动推断C/C++标准库头文件的路径,以提供正确的路径;
最后放上我的完整配置:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
5.2.创建构建任务
在配置完gcc编译器路径后,需要创建一个tasks.json
文件来告诉VS Code如何构建(编译)程序,此任务将调用gcc编译器基于源代码创建可执行文件。
按
Ctrl+Shift+P
调出命令面板,输入task
,选择Tasks:Configure Default Build Task
:选择使用模板创建
tasks.json
文件:选择
Others
:VScode会在
.vscode
文件夹创建tasks.json
文件,该文件指定如何构建可执行文件,其默认内容如下:添加构建任务,使用下面的代码替换整个文件内容,如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "build hello world",
"type": "shell",
"command": "gcc",
"args": [
"-g",
"-o",
"helloworld",
"helloworld.c"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
其中:
label
指定该任务的名称,后续会在VS Code Command Palette中看到;command
指定要运行的程序;args
指定传递给gcc的命令行参数,注意这些参数必须按照编译器指定的顺序排列;group
中的isDefault: true
指定了当我们按下Ctrl+Shift+B
时该任务会被自动运行,这仅仅是为了方便,如果设置为false,则必须要在命令面板中手动运行该任务;
5.3.配置调试设置
在添加完构建任务后,就可以生成可执行程序了,接下来我们配置调试设置,使得按下F5
之后VS Code会自动启动gcc调试器(gdb.exe
)。
选择
调试
一栏,然后点击设置
按钮:选择
C++(GDB/LLDB)
:选中后VS Code会自动在
.vscode
下生成launch.json
文件,该文件指定了调试器的设置,其默认内容如下:program
中的最后需要指定可执行程序的名称;stopAtEntry
是启动调试时自动停止在程序入口第一行main,可设置为true
或false
;miDebuggerPath
中需要指定gdb调试器的路径,比如在这个我指定为C:/mingw64/bin/gdb.exe
;
至此,完整的launch.json
设置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/helloworld.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/mingw64/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
6.构建程序
之前在5.2节中创建了构建任务tasks.json
,有两种运行方式可以执行构建任务:
直接按
Ctrl+Shift+B
(需要将任务设置为默认);在命令面板中输入
task
,然后选择运行构建任务
;
任务执行后,在集成终端窗口中会显示编译器的输出,指示构建成功或者失败,对于成功的构建,输出如下:
在终端输出消息后,按任意键关闭构建消息。
构建任务运行后,如果构建成功,在当前工作区会生成我们在构建任务中指定的可执行程序:
双击程序即可运行:
7. 启动调试会话
7.1.启动调试
之前在5.3节中已经配置了调试的一些设置,启动调试有两种方式:
直接按
F5
;选择
调试
->启动调试
;
7.2.调试界面
启动调试后,VS Code的调试界面如下:
终端显示了启动gdb的命令行信息,这些信息不用在意;
因为之前在launch.json
中设置了启动后自动停止在main函数的第一行,如图:
在代码编辑器的顶部会出现一个调试控制面板:
控制面板中的按钮从左到右依次是:
移动按钮:拖住后可以移动调试控制面板;
继续运行(
F5
);单步跳过(
F10
);单步调试(
F11
);单步跳出(
Shift+F11
);重启(
Ctrl+Shift+F5
);停止调试(
Shift+F5
);
VS Code的左侧是变量查看窗口,监视查看窗口,堆栈查看窗口:
7.3.设置监视
有时候在调试的时候需要跟踪变量的值,可以通过在变量上设置监视完成该操作。
首先修改代码:
int main(void)
{
int i;
printf("Hello World.\n");
for(i = 0; i < 5; i++)
{
printf("%d.\n",i);
}
system("pause");
return 0;
}
重新按Ctrl+Shift+B
执行构建任务;
然后按F5
进入调试;
在监视窗口点击+
号,然后输入i
查看i:
然后在需要暂停处打上断点:
然后使用单步调试运行进行调试,在程序暂停时,可以将鼠标悬停在变量处查看该变量这个时刻的值:
8. 编译运行后中文乱码问题
在VS Code编写C语言时,经常会遇到中文显示乱码问题,如下:
这是因为文件默认是UTF-8
编码,在状态栏显示:
点击UTF-8
切换编码,切换到GBK
编码即可:
然后重新编译运行即可:
要添加微信交流讨论群的用户可以添加微信公众号客服并发送消息说明要添加的群(四轴、STM32、ESP8266、PCB设计四个群选择其一),微信公众号客服微信号:electricstudyer,二维码如下:
历史好文集合(点击标题可跳转):
开源STM32F1小四轴完整资料发布一(源代码、原理图、3D库、PCB)
基于面向对象思维的STM32开发基本思路--以GPIO口的操作为例