C++后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发

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 返回值拆分成 truefalse 两种情况"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

.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启动”调试即可。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无损音乐下载,最新音乐下载,mp3格式音乐下载,一键下载mp3格式音乐,我只用这个软件,歌曲资源丰富,全网音乐免费下载,稳定运行,告别收费

一、软件简介 现在很多支持一键下载mp3音乐/无损音质音乐的音乐播放器通常都是解析接口套了一个壳,一旦解析接口失效,软件就不能下载音乐了,因此一个稳定的解析接口是这类软件最大的保障。本次小编推荐的音乐下载软件接口非常稳定&#xff0…

货仓选址(c++题解)

题目描述 在一条数轴上有N家商店,它们的坐标分别为 A[1]~A[N]。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。 …

单片机学习笔记---LED点阵屏的工作原理

目录 LED点阵屏分类 LED点阵屏显示原理 74HC595的介绍 一片74HC595的工作原理 多片级联工作原理 总结 LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽…

3分钟带你了解Vue3的nextTick()

前言 Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。简单来说,Vue在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新&#xff…

第五篇【传奇开心果系列】vant开发移动应用示例:深度解读高度可定制

传奇开心果博文系列 系列博文目录Vant 开发移动应用示例系列 博文目录前言一、Vant高度可定制的重要作用二、样式定制介绍和示例代码三、组件定制介绍和示例代码四、组件库定制介绍和示例代码五、主题定制介绍和示例代码六、语言环境定制介绍和示例代码七、资源加载定制介绍和示…

网络层DoS

网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,其目的 是实现两个终端系统之间数据的透明传送,具体功能包括:寻址和路由选择、连 接的建立、保持和终止等。位于网络层的协议包括ARP 、IP和ICMP等。下面就 ICMP为例&…

创建一个VUE项目(vue2和vue3)

背景:电脑已经安装完vue2和vue3环境 一台Mac同时安装vue2和vue3 https://blog.csdn.net/c103363/article/details/136059783 创建vue2项目 vue init webpack "项目名称"创建vue3项目 vue create "项目名称"

diffusers单机多卡推理(全网首发)

起因 博主在部署InstantID项目时,显存不够,想要将模型分散在多张卡上。 翻到这篇发现是分布式推理,博主一直以为这个可以达到我想要的效果,但是效果是多线程并行推理,并不能将一个模型切片在多个GPU上。 Distributed …

一起玩儿物联网人工智能小车(ESP32)——57. SPI总线协议初探(一)

摘要:介绍SPI总线的基本知识 前面已经学习过IIC总线协议,今天开始介绍另一个总线协议——SPI。SPI(Serial Peripheral Interface,串行外设接口)是由Motorola提出的一种高速、全双工、同步的通信总线。并且在芯片的管脚…

TI的电量计驱动在卸载时导致Linux卡死

背景 最近移植TI电量计芯片bq40z50的驱动,移植完毕后,能正常读取电池信息了,但是无意中发现驱动卸载会导致Linux卡死,死前终端闪过大量打印,将putty的缓冲区都耗尽了,必须启用syslog转发并用visual syslog…

用docker 配置scala spark环境

要使用Docker配置Scala和Spark环境,您可以按照以下步骤进行操作。以下是一个基本的示例,您可能需要根据您的具体需求进行调整。 安装Docker: 在您的系统上安装Docker。您可以从Docker官方网站下载并安装适用于您操作系统的版本。 创建Dockerfile: 在您的…

数据分析基础之《pandas(6)—高级处理》

一、缺失值处理 1、如何处理nan 两种思路: (1)如果样本量很大,可以删除含有缺失值的样本 (2)如果要珍惜每一个样本,可以替换/插补(计算平均值或中位数) 2、判断数据是否…

L1-080 乘法口诀数列

一、题目 二、解题思路 三、代码 #include<iostream> using namespace std; int main() {int a1,a2,n;cin>>a1>>a2>>n;if(n1){cout<<a1;return 0; }int a[n*2];cout<<a1<<" "<<a2;a[0]a1;a[1]a2;for(int i2,j2;i&l…

ubuntu20安装mongodb

方法一&#xff1a;直接安装(命令是直接从mongo官网Install MongoDB Community Edition on Ubuntu — MongoDB Manual复制的&#xff09; cat /etc/lsb-release sudo apt-get install -y gnupg curl curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gp…

背包问题(01背包、完全背包、多重背包)详解(超详细!!!),及题目代码和题意,包含6个例题。

第一题&#xff1a;01背包问题 01背包问题 时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 一个旅行者有一个最多能装 M 公斤的背包&#xff0c;现在有 n 件物品&#xff0c;它们的重量分别是 W1&#xff0c;W2&#xff0c;...,Wn ,它们的价值分别为 C1…

maven插件maven-jar-plugin构建jar文件详细使用

文章目录 前言一、使用方式二、常用配置详解1.classesDirectory2.outputDirectory3.excludes4.includes5.archive添加Implementation和Specification属性添加manifestEntries添加键值对属性Manifest Sections自定义manifest配置设置一个可执行的jar文件精确设置Classpath根据目…

[C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法

参考网上大部分方法错误&#xff0c;根本不起作用。正确方法是 C:\Users\你的用户名\AppData\Roaming\NuGet找到NuGet.Config打开&#xff0c;看到类似下面信息&#xff08;可能不一样&#xff09; <?xml version"1.0" encoding"utf-8"?> <co…

FXTM富拓监管变更!2024开年连续3家交易商注销牌照

交易商的监管信息是经常发生变更的&#xff0c;即使第一次投资时查询平台监管牌照&#xff0c;投资者仍需持续关注其监管动态。千万不要以为第一步审核好后就万事大吉了&#xff01; 2024年开年&#xff0c;就有3家交易商的重要信息发生变更&#xff0c;注销其金融监管牌照&…

专业课147总420+福州大学866信号与系统考研经验福大电子信息技术信息与通信

我本人一战双非上岸福大&#xff0c;初试分数420&#xff0c;期中专业课866信号与系统147&#xff08;有点遗憾没有达到信息通信考研Jenny老师辅导班要求的满分&#xff09;。这里想分享一些自己准备初试的过程和一些学习方法&#xff0c;希望能给各位准备报考福州大学866的学弟…

HiveSQL——借助聚合函数与case when行转列

一、条件函数 if 条件函数 if函数是最常用到的条件函数&#xff0c;其写法是if(xn,a,b), xn代表判断条件&#xff0c;如果xn时&#xff0c;那么结果返回a ,否则返回b。 selectif(age < 25 or age is null, 25岁以下, 25岁以上) as age_cnt,count(1) as number from table…