C++后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发
没错,我不能像大佬那样直接在Ubuntu上面用Vim手搓代码,只能在本地配置一下VSCode远程连接Ubuntu进行开发咯!
本篇主要是讲解了VSCode如何配置ssh连接Ubuntu,还有如何使用VSCode和CMake进行编译与调试。
Ubuntu开启ssh服务
- 安装ssh
sudo apt install openssh-server
- 安装完毕后,开启ssh服务
sudo systemctl start ssh
- 查看是否开启成功
sudo ps -e |grep ssh
ssh-agent表示ssh-client启动,sshd表示ssh-server启动,两个都开了就可以
- 设置开机自启
sudo systemctl enable ssh
- 设置后重启Ubuntu
reboot
- 重启后检查ssh是否自动启动成功
sudo systemctl status ssh
出现active (running)即可
VSCode远程连接Ubuntu
安装插件Remote-SSH
配置主机信息,点击左侧的远程连接标志,再点击设置按钮
选择第一个config文件
第一行Host任意填,第二行为Ubuntu虚拟机的ip地址,第三行为你Ubuntu虚拟机的用户名
设置后刷新一下就在下面的列表中显示出来了
然后测试连接
选择平台
然后根据提示输入密码,连接成功会在左下角显示。
然后就可以在左侧的第一个资源管理器中打开我们Ubuntu上面的文件夹了。
远程连接失败怎么办?
我第一次配置遇到的问题是“过程试图写入的管道不存在”
首先用Windows自带的CMD试试能不能远程连接
输入ssh Ubuntu登录用户名@Ubuntu的IP地址,然后回车输入密码即可
可以看到是正常的,说明我们的SSH是没问题的。
如果这一步连接不上,就要检查下面这三个地方了:
- Ubuntu的ip地址正确吗?
- 输入ip a检查ip地址
- ssh是否启动成功?
- 通过上面安装ssh的步骤检查
- 用户名有没有输入正确
- 查看Ubuntu的用户名
- 如果问题是Setting up SSH Host XX:Copying VS Code Server to host with scp
- 查看Setting up SSH Host XX:Copying VS Code Server to host with scp
回到我的问题中,既然我的ssh没有问题,那么就是VSCode的ssh没有配置好
首先在cmd中输入where ssh,可以看到有两个ssh.exe
而通过检查我的VSCode远程连接时的输出日志发现,它使用的是我的第一个ssh.exe,而CMD能够远程连接因为它使用的的第二个ssh.exe
那就好办了,在VSCode设置一下我的ssh.exe文件路径即可:
- 打开设置,搜索Remote-SSH
- 在Remote.SSH: Path中填入ssh.exe的路径
再次测试远程连接成功。
怎么关闭远程连接
远程连接后,想要关闭远程连接就点击左下角
然后在弹出来的窗口中点击”关闭远程连接“即可
注意事项
当你远程连接Ubuntu之后,会在你的Ubuntu创建一个VSCode的环境,如果从VSCode安装插件默认是安装到你的Ubuntu的VSCode环境里面,想安装到本地需要关闭远程连接再安装。
怎么远程开发
配置Doxygen模板
参考教程1
参考教程2
- VSCode安装插件
- 配置模板
点击设置,搜索doxdocgen,然后编辑setting.json
我自用的模板如下
// 注释
"doxdocgen.c.triggerSequence": "/**", // 触发自动注释的生成
"doxdocgen.c.commentPrefix": " * ", // 注释行的前缀
"doxdocgen.c.firstLine": "/**", // 注释行的首行
"doxdocgen.c.lastLine": " */", // 注释行的尾行
// file注释顺序
"doxdocgen.file.fileOrder": [
"custom", // 自定义选项
"empty",
"file",
"date",
"brief",
"author",
"version",
"empty",
"custom", // 自定义选项
"copyright",
"custom" // 自定义选项
],
// file自定义选项
"doxdocgen.file.customTag": [
"************************************************************************",
],
"doxdocgen.file.copyrightTag": [ // file注释
"@copyright Copyright (c) {year} By Author"
],
"doxdocgen.generic.authorEmail": "name@youremail.com", // {email} 样式
"doxdocgen.generic.authorName": "Author", // {author} 样式
"doxdocgen.generic.dateFormat": "YYYY-MM-DD", // {date} 样式
"doxdocgen.generic.dateTemplate": "@date{indent:9}{date}", // {date} 模板
"doxdocgen.file.fileTemplate": "@file{indent:9}{name}", // {name} 模板
"doxdocgen.generic.briefTemplate": "@brief{indent:9}描述",
"doxdocgen.file.versionTag": "@version{indent:9}0.1",
"doxdocgen.generic.authorTag": "@author{indent:9}{author}({email})",
// generic注释的内容和顺序
"doxdocgen.generic.order": [
"custom", // 自定义选项
"brief",
"param",
"return",
// "empty",
"author",
"date",
"custom", // 自定义选项
],
// generic自定义选项
"doxdocgen.generic.customTags": [
"************************************************************************",
],
"doxdocgen.cpp.tparamTemplate": "@tparam {param} ", // ???
"doxdocgen.generic.paramTemplate": "@param{indent:9}{param}{indent:21}参数描述",
"doxdocgen.generic.returnTemplate": "@return{indent:9}{type} ",
"doxdocgen.generic.includeTypeAtReturn": true, // return 中包含类型信息
"doxdocgen.generic.boolReturnsTrueFalse": false, // bool 返回值拆分成 true 和 false 两种情况
"doxdocgen.generic.linesToGet": 4, // 回车后最多向下多少行去找函数声明
"doxdocgen.generic.useGitUserName": false, // {author} 是都根据 git config --get user.name 替换
"doxdocgen.generic.useGitUserEmail": false,
编辑好记得保存,使用方法就是,在代码前面一行开头输入/**,然后回车即可
- 效果如下
CMake推荐教程
- CMake 良心教程,教你从入门到入魂
- CMake官方教程示例
- CMake简明教程(中文版)
- CMake 语法与实战入门
- CMake使用详解
- CMake编译选项解析
- Linux环境下使用VScode调试CMake工程
- VSCode + CMake 编译调试
- VSCode+CMake 配置launch.json和tasks.json
配置CMake(编译)
在上一篇文章中,我们已经安装了CMake,想要编译一个项目,假设我们当前处于CMakeLists.txt文件同级目录的build文件夹下,我们编译生成的项目和可执行文件都将放在这个目录,我们只需要执行以下三条命令
cmake ..
cmake --build .
第一条命令是指定CMakeLists.txt 所在路径,并生成相应的构建系统文件。此时在 build 目录下,所以用 … 表示 CMakeLists.txt 在上一级目录,通俗地讲就是把CMakeLists.txt里面的代码执行了一遍。
第二条命令是指定编译生成的文件存放目录,然后编译和构建项目,生成目标文件,. 表示存放到当前目录
第二条命令也可以写成
make
但是,我们想通过VSCode开发,为了能够在CMake中进行编译和调试我们的项目,就需要在VSCode中配置一下我们的CMake,这样就不需要再去手动执行上面的三条命令了。
有个傻瓜式的配置方法,不需要配置task.json和launch.json这两个文件,可以参考这个教程,使用最简单的方法来配置CMake。
这里我使用的是通过配置task.json和launch.json来配置CMake的编译和调试任务(不管是哪种方法都需要安装下面的这三个插件)。
首先,VSCode连接上我们的Ubuntu,然后安装C/C++、CMake、CMake Tools插件
- 配置task.json
- 点击终端-----配置默认生成任务-----选择CMake:生成(英文为CMake:Build)
此时,会在我们的工作区根目录创建一个.vscode文件夹,同时还会在.vscode文件夹生成一个task.json
- 点击终端-----配置默认生成任务-----选择CMake:生成(英文为CMake:Build)
.vscode 文件夹是 Visual Studio Code(VSCode)中用于存储工作区特定设置的文件夹。在这个文件夹中,你可以包含一些配置文件,以便与你的项目关联的开发环境和编辑器设置能够得到正确的应用。
主要包括以下几个方面的配置:
settings.json 文件: 这个文件包含了工作区特定的设置,这些设置将覆盖全局设置。你可以在其中配置编辑器的行为,例如缩进风格、字体大小、主题等。
launch.json 文件: 用于配置调试器的启动配置,定义了在 VSCode 中如何启动和调试你的应用程序。你可以设置断点、运行参数等。
tasks.json 文件: 该文件允许你定义和配置任务(tasks),比如编译、运行脚本等。你可以在这里配置构建命令、参数等。
这些文件的存在使得你可以在不同的项目中定制你的编辑器环境,而不影响全局设置。在多人协作或者多项目开发中,这种工作区特定的配置非常有用,因为每个项目可能有不同的需求和规范。
把task.json中的内容替换成下面的(没特殊需求可以不改)
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {
"cwd":"${workspaceFolder}/build"
},
"tasks": [
{
"label": "cmake",
"type": "shell",
"command": "cmake",
"args": [
".."
],
"problemMatcher": []
},
{
"label": "make",
"group": "build",
"command": "make",
"args": [],
"problemMatcher": []
},
{
"label": "CMake_Build",
"dependsOrder": "sequence",
"dependsOn": [
"cmake",
"make"
]
}
]
}
然后保存一下,当需要编译我们的项目时,我们先在项目的CMakeLists.txt的位置新建一个build目录,然后只需要点击终端-----运行任务-----选择CMake_Build
选择继续而不扫描任务的输出
然后VSCode就会帮我们执行cmake …和make命令效果和在Ubuntu中执行是一样的。
配置CMake(调试)
编译配置好了,就可以配置我们的调试了
先点击左侧的“调试”图标,然后选择创建launch.json文件
然后在.vscode文件夹中就会生成一个launch.json
替换其中的内容如下(需要修改program的值为项目生成的目标名,我这里目标名是Tutorial;需要修改args,如果不需要命令行传递参数,设置为空列表[ ]即可)
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/Tutorial",
"args": ["1","2","3"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask":"CMake_Build",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
我们的调试环境就配置好了,需要说明的是,其中的这一行代码
"preLaunchTask":"CMake_Build"
是可以不要的,这行代码的目的是在调试之前先执行一下“CMake_Build”任务,也就是我们上面定义的编译任务,目的就是,在我们对代码做出更改后,调试的时候可以保证是对我们最新的代码进行的调试,如果不进行编译,那么由于生成的目标文件还是原来的,导致我们还是在调试修改前的代码,综上,建议保留。
调试的时候按F5或者点击左侧的调试图标,然后使用“gdb启动”调试即可。