在嵌入式和服务器端程序开发中,Linux是主流的开发、运行平台,但直接在这些平台上进行代码开发在很多情况下很繁琐(只能使用文本字符进行编辑,很多嵌入式Linxu系统不提供图形界面环境,工作难度极大,效率极其低下),一般情况是在Windows或MacOS上编写代码,在目标主机上进行编译、运行,使用Windows或MacOS作为代码开发平台,节省了很多界面、字体的配置美化工作;将编写好的程序代码在Linux主机上进行编译、调试可以极大的提升工作效率。VSCode是微软出品的一款免费的轻量级开发工具,通过安装不同的应用扩展,可以作为很多语言的开发工具,本文主要介绍如何配置VSCode作为Linux C 的远程开发工具。
一、安装应用扩展
使用VSCode作为C/C++的IDE,需要用到两个扩展,一个用于连接Linux服务器(Remote-SSH扩展),另一个扩展(C/C++)用于VSCode对C语言的支持
打开VSCode,点击应用左侧栏的扩展(Extention)按钮,在左上角的扩展搜索框中输入 Remote ssh
![](https://i-blog.csdnimg.cn/blog_migrate/bdb476f35fc897ff6ac6f60e6a4d15de.png)
安装完Remote-SSH后,再次在扩展搜索框中输入 C/C++,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/414a8e1d5869b9a3bff4f8c51ccd6f81.png)
两个扩展安装成功后,便可以针对远程开发Linux C进行环境的配置了。
二、配置Remote-SSH连接至远程主机
在安装了Remote-SSH应用扩展后,VSCode在左下角便会出现一个黄色图标
![](https://i-blog.csdnimg.cn/blog_migrate/ac12465a407a20e61b70502826245502.png)
,点击该图标,在上方弹出的下拉列表中选择 Connect to Host...
![](https://i-blog.csdnimg.cn/blog_migrate/0776c50c41b08fc0c564a8cb88c8149a.png)
在下一个弹出窗口中,选择 Add New SSH Host...
![](https://i-blog.csdnimg.cn/blog_migrate/565a542b916465ec2c352cb26e7e5876.png)
选择该选项后,在接下来的弹出框中输入所要连接主机的信息
![](https://i-blog.csdnimg.cn/blog_migrate/69bfd915574ab66536772a0ca3b0df4d.png)
输入相关信息后,将出现以下窗口
![](https://i-blog.csdnimg.cn/blog_migrate/6432bff1dfe0045e2d9d8b43a3ed0d1d.png)
该窗口主要是确定存储Remote-SSH连接主机信息的文件,一般选择第一个,即:C:\Users\XXX.ssh\config 作为配置文件。选择成功后,会在VSCode右下角弹出提示窗口:
![](https://i-blog.csdnimg.cn/blog_migrate/5c84baee1dc6f8f3254a6fc73637a99f.png)
选择Open Config按钮,便会在编辑器中打开刚才的配置信息
![](https://i-blog.csdnimg.cn/blog_migrate/066cdee418699366fa996be1639af794.png)
确认没有问题后,便可以关闭该窗口了。
再次点击IDE左下角黄色图标,在弹出的窗口中选择Connect to Host... ,在弹出的窗口中,便会出现刚才配置的主机信息,点击该主机信息,VSCode将会启动一个新的IDE窗口,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/8270f0f207d53f5a511b1ca85d74a0da.png)
选择 Linux ,确认要连接该主机后,Remote-SSH将询问连接该远程主机的密码:
![](https://i-blog.csdnimg.cn/blog_migrate/559094b4933ec8dd93dea807c7f9be20.png)
连接成功后,将在左下角显示已经连接的信息:
![](https://i-blog.csdnimg.cn/blog_migrate/58da015d29d2c3c82751fdefd47868bc.png)
Tip:为了避免每次连接远程主机都需要输入密码,最好在Windows和Linux主机之间通过RSA密钥进行认证。
点击左边栏的文件浏览器(Explorer)
![](https://i-blog.csdnimg.cn/blog_migrate/22e4fafc441b3b84ee2896436930884f.png)
点击Open Folder按钮,在弹出的窗口中选择一个工作目录作为C/C++程序的开发目录即可。
![](https://i-blog.csdnimg.cn/blog_migrate/6483682367854fb6b2b832397b830fef.png)
三、配置C/C++扩展
安装好该扩展后,使用快捷键(Ctrl + Shift + P)调出配置查找对话框,在对话框中输入 c/c++ 将弹出以下界面:
![](https://i-blog.csdnimg.cn/blog_migrate/6deb18a149f8fc31065d67fd1e4d97b9.png)
点击 c/c++编辑配置(UI), 调出该扩展的配置界面,在该配置界面中,主要注意以下几项:
配置名称:在Linux平台下,该项应该为 Linux
编译器路径:gcc在Linux系统中的路径,一般为:/usr/bin/gcc
IntelliSense 模式:选择默认值即可。(64位系统一般是 linux-gcc-x64)
包含路径:重点配置项!,Linux系统的头文件一般在 /usr/include 目录下,一定要配置此目录信息,最基础配置如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/57e01c768cc812e4bf92e1626d84438c.png)
配置完成后,该配置信息会保存在工程目录 .vscode/c_cpp_properties.json 文件中,配置好后,文件内容大致如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8a1ed470c79a8bb83b562b4fe1c9b8a8.png)
四、配置调试(Debugger)
使用VSCode进行远程调试需要配置两个文件,这两个文件分别是
tasks.json:编译器配置文件(在debug之前需要对要调试的程序进行编译)
launch.json:调试器配置文件
配置tasks.json
点击菜单 (终端(Terminal)--> 配置任务(Configure Tasks...))
![](https://i-blog.csdnimg.cn/blog_migrate/4c346c0a8fd15c577b0c36e03f0304c2.png)
将打开tasks.json文件,该文件内容大致如下:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc 生成活动文件",
"command": "/usr/bin/gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
其中 label、args配置项需要注意,label配置的内容需要和 launcher.json 配置文件中的前、后置任务名称(preLaunchTask和postDebugTask)相对应的,args配置项中的${fileDirname}/${fileBasenameNoExtension} 配置项需要和 launcher.json 配置文件中的 program 配置项相对应。
Tip:VSCode配置文件中经常用到一些宏定义,如 ${file} ,常见配置文件的宏定义如下:
假如将VSCode工作区设置为 /home/user1/workspace 目录, 在VSCode编辑器中打开了 main.c 文件,则:
${workspaceRoot}: 工作区目录 --> /home/user1/workspace
${file}: 所打开文件的所在目录+全名 --> /home/user1/workspace/main.c
${fileBasename}: 所打开文件的全名 --> main.c
${fileDirname}: 所打开文件的所在目录 --> /home/user1/workspace
${fileExtname}: 所打开文件的扩展名 --> .c
${fileBasenameNoExtension}: 所打开文件的无扩展文件名 --> main
${cwd}: 调试程序时的工作目录 --> /home/user1/workspace
在 tasks.json 配置项 args 中,最后一项为 ${fileDirname}/${fileBasenameNoExtension} ,假如在运行调试main.c文件时,VSCode将其解释为:/home/user1/workspace/main
配置launcher.json
在编辑器中打开一个所要调试的C/C++源文件,再点击IDE左侧栏的Debug按钮,在左侧弹出界面中点击 create a launcher.json file, 如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/5da10c5478220f10dccdd5235b41bf9f.png)
编辑器中将显示IDE创建的 launcher.json 文件,请按如下配置该文件的内容:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc 生成活动文件"
}
]
}
该文件中的 program 和 preLaunchTask 配置项和 tasks.json 中的label、args 配置项相对应。
Ok,配置好以上信息后,打开需要调试的程序,设置好断点后,按下键盘的 F5 键进行调试吧!