VisualGDB系列9:配置VS直接通过SSH方式访问Linux项目
根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成。主要是作为个人学习记录。有错误的地方,Robin欢迎大家指正。
本文介绍如何使用VS和VisualGDB开发这样的项目:用VisualGDB CMake Project System来开发驻留在Linux机器上的项目。
常规的VisualGDB项目,有的需要从Windows端下载源文件和头文件,有的需要使用难以维护的共享文件夹。而直接访问的项目使得VS能够直接编辑Linux机器上的文件,保证你总是使用文件的最新版本。
进行如下步骤之前,确保安装VisualGDB5.3或更新版本。
1 打开VisualGDB Linux项目向导
启动VS,打开VisualGDB Linux Project向导:

2 创建基于CMake项目
只有基于CMake的项目,VisualGDB才能使用SSH直接访问。选择”Create a new Project”->”Use CMake”,并勾选”Use the advanced CMake Project Subsystem”复选框:

3 选择Linux机器
在下一页选择你的Linux机器:

4 配置源码访问
在子页面”Source code access”,选择”Access the sources directly over SSH”,并点击”Finish”来创建项目:

5 构建项目
通过”Ctrl-Shift-B”来build该项目:

6 调试项目
放置断点,并按F5开始调试项目:

7 查看项目的Windows文件夹
检查项目的Windows文件夹,发现该文件夹下既不包含源码文件,也不包含构建的二进制文件,只是包含solution文件、VisualGDB项目文件以及IntelliSense缓存:

8 VS里观察远程文件
在VS里,将鼠标悬在源文件tab上,可以看到,对于远程项目,路径是”vgdbssh://”这样的语法模式。

9 打开终端
在Solution Explorer中,在target上右键,然后选择”Open Terminal Here”:

10 安装”zlib”库
下面在Linux机器上安装”zlib”库,并展示VisualGDB如何自动识别它。在SSH Console里运行” sudo apt-get install zlib1g-dev”:

11 调用zlib中的函数
一旦zlib安装成功后,源文件中包含<zlib.h>头文件。观察IntelliSense如何即时提示,而不需要同步任何目录:

在源码中调用函数zlibVersion(),可以看到,由于缺少被调用函数的定义,链接(link)会失败:

打开主程序target的属性页,在”Linked Libraries field”中添加”z”:

对目标进行调试,确保函数正确调用:

12 VisualGDB自动编辑CMakeLists文件
观察一下VisualGDB如何在CMakeLists.txt文件中编辑target_link_libraries()声明:

13 添加新的源文件
通过”Add”->”New Item”来添加一个新的源文件,也可以remove该文件(选择”Remove”,而不是”Delete”,使得文件继续保留在磁盘上)。然后保存项目:

14 添加已存在的项
选择”Add”->”Existing Item”:

观察一下,VisualGDB如何在Linux机器上浏览远程文件系统,就像在本地Windows浏览一样:

15 修改项目属性
Solution Explorer中,在项目上右击,选择”VisualGDB Project Properties”:

VisualGDB Project Properties窗口允许编辑各种VisualGDB专有的项目属性。比如,可以明确设定cmake的位置,或者添加”-DCMAKE_VAR_NAME=VALUE”参数来修改项目的配置:

16 Linux机器上运行CMake来构建项目
VisualGDB CMake项目是自治的(self-sufficient),我们也可以在Linux机器上运行CMake来构建它们:

17 高度优化的缓存机制
VisualGDB采用高度优化的缓存机制来避免一次又一次地下载同一个文件。它在CodeDB\<project>\VFSCache目录下保持着相关文件的缓存拷贝,并周期性地检测相关的远程目录是否变化。
常规的项目需要提前下载整个include目录和源文件目录,而直接访问的项目只有需要时才去读取相应的文件,所以这种方式性能更好且更加简单清晰。
如果想查看远程FS缓存的内部状态,可以通过”View”->”Clang IntelliSense Diagnostics Console”->”Remote FS”:

这个控制台将会显示从远程Linux机器罗列目录及获取文件所耗费的精确时间,所以你就可以快速检查你的网络能否满足直接访问模式所需的网络性能。
VisualGDB系列9:配置VS直接通过SSH方式访问Linux项目的更多相关文章
- 限制SSH用户访问Linux中指定的目录
限制SSH用户访问Linux中指定的目录 http://os.51cto.com/art/201703/534895.htm#topx http://www.cnblogs.com/lykyl/arc ...
- SSH服务及通过SSH方式登录linux
SSH服务及通过SSH方式登录linux 1.检查SSH服务转自:[1]Linux之sshd服务https://www.cnblogs.com/uthnb/p/9367875.html[2]Linux ...
- Xshell通过ssh方式连接Linux服务器,通过Xftp进行文件传输
准备工作: 一.Linux服务器一台,并配置ssh(本文以腾讯云服务器为例). 1.生成秘钥 打开腾讯云控制台,依次选择:总览->云服务器->SSH秘钥 点击创建秘钥,输入秘钥名称,点击确 ...
- Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
http://www.cnblogs.com/zhongweiv/archive/2013/01/07/https.html 配置环境 了解HTTPS 配置CA证书服务器 新建示例网站并发布在IIS ...
- CentOS搭建GIT服务器【一】-仓库搭建以及基于gitosis的SSH方式访问
1.安装GIT核心 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel gcc g ...
- IIS7.0 Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
配置环境 Windows版本:Windows Server 2008 R2 Enterprise Service Pack 1 系统类型: 64 位操作系统 了解HTTPS 为什么需要 HTTPS ? ...
- 使用putty连接Ubuntu虚拟机,使用ssh方式访问
1 前言 Ubuntu14.04版本是可以直接连接的,没想到新装的Ubuntu18.04竟然没有默认安装ssh. 则安装一下open-ssh-server就可以的. 2 步骤 2.1 更新一下源 命令 ...
- Asp.Net配置不允许通过url方式访问目录下的资源
Asp.Net网站发布后,有部分文件为了安全性,是不能直接通过url访问获取 通常有2种做法: 1.将文件目录建立在 App_code 或者App_Data 等默认的隐藏目录下 2.将文件的目录添加到 ...
- 配置kubectl客户端通过token方式访问kube-apiserver
使用的变量 本文档用到的变量定义如下: $ export MASTER_IP=XX.XX.XX.XX # 替换为 kubernetes master VIP $ export KUBE_APISERV ...
随机推荐
- Symfony 如何使用ckeditor
首先: 1)加载以下两个bundle "egeloen/ckeditor-bundle": "^4.0","helios-ag/fm-elfinder ...
- Android中的资源访问
Android中的资源是指非代码部分,指外部文件. assets中保存的一般是原生的文件,例如MP3文件,Android程序不能直接访问,必须通过AssetManager类以二进制流的形式来读取. r ...
- [原创]java WEB学习笔记33:Session 案例 之 购物车
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- pt-table-checksum检验主从数据不一致
测试环境:主从架构,操作系统liunx 运行pt-table-checksum需要先安装以下依赖包: yum install perl-IO-Socket-SSL perl-DBD-MySQL per ...
- Python 运算符(算术运算符(+,-,*,**,/,//),逻辑运算符(not , or ,and),比较运算符(>,<,>=,=<),复合运算符(+=,-=,*=,/=,**=,//=))
# 一.算术运算符(+,-,*,**, /, //, %) # 加法运算符+ print(1 + 2) # 字符串相连 ") # 重载 print([1,2] + [3,4]) # 幂运算* ...
- nginx location 语法
location 语法location 有”定位”的意思, 根据Uri来进行不同的定位.在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上.比如, 碰到.p ...
- c版基于链表的插入排序(改进版)
1. [代码][C/C++]代码 /** * @todo c版基于链表的插入排序 * @author Koma **/#include<stdio.h>#include<st ...
- js 禁止用户使用Ctrl+鼠标滚轮缩放网页
为什么会有人会使用ctrl+鼠标滚轮缩放网页?坚决禁止! <html> <head> <title>测试</title> <script lang ...
- priority_queue用法(转载)
关于priority_queue 1,关于STL中的priority_queue:确定用top()查看顶部元素时,该元素是具有最高优先级的一个元素. 调用pop()删除之后,将促使下一个元素进入该位置 ...
- Unity3D连接WCF
Unity3D连接WCF: 一.最简单的案例 1.VS2015中: (1)建立WCF应用服务程序ForUnity: (2)将自动生成的IService1.cs与Service1.svc删除: (3 ...