本文用来测试的版本是VS2017.15.9.8 内网(\\192.168.80.20) 有相应的离线安装包
如图所示, 我们需要勾选这些组件.
本文用来测试的版本是VMWare15.0.0 以及猎人3D项目组用的CentOS7镜像.
建议直接使用CMake3.12, 这个版本实测通过, 过低版本没有Server Mode的支持, 过高版本可能存在兼容性问题, 直接在官网下载源码编译安装即可, 在远程服务器上通过cmake –version确认版本号, 通过 cmake –E capabilities 查看ServerMode是否为True
由于用来测试的猎人3D服务器使用了部分C++14的特性, CentOS对应的GCC版本使用的是8.2(实测如果C++代码没有使用新特性, GCC4.8也能与VS良好的协同工作).
本文使用的服务器代码是公司内部在研项目的服务器代码, 通过对原来的CMake配置做一些调整更新, 最后得到一份可以在VS模式下良好工作的代码. (具体调整过程略去)
使用SecureCRT连接CentOS7, 确保SSH的可用性, 也可以使用其他个人习惯的SSH连接软件.(因为VS本身就是通过SSH方式对远程Linux主机进行访问, 我们先需要先确保SSH连接的可用性)
上图是笔者的VMWare网络设置和CentOS内的IP配置, 目前配置的虚拟机IP是192.168.183.100, 我们先确认虚拟机网络的联通性:
先在Windows中确保远程主机是可联通的.
接下来我们使用SecureCRT对远程CentOS7主机进行连接测试:
确保远程CentOS7的主机是可以通过SSH访问的(不能访问请自行查阅SSH服务配置相关文章, 本文略过).
打开VS, 访问菜单栏 Tools->Options, 选择 Connection Manager选项卡, 点击Add按钮, 在弹出的Connect面板中正确配置SSH连接参数:
点击Connect按钮后, VS会自动进行连接测试并尝试下载远端的头文件.
利用上图的选项卡可以确认相关头文件的状态. 点击Explore按钮可以查看从远端下载的头文件, 正确下载头文件后, 在VS中, VA可以正确提示Linux相关的函数与结构体, 方便我们编写和查看相关代码。具体效果如下图所示:
如图所示, VA可以正确的提示linux相关的系统函数和结构体, 方便我们编写代码. 我们也可以直接跳转到对应头文件查看函数和结构体的具体声明, VA相关的用法本文不详细介绍, 不是必须功能, 直接使用VS自带的智能提示等, 也是可以的.
VS对Linux工程的组织有两种形式, 我们都进行简单的介绍.
我们可以通过VS2017的菜单项打开新建工程面板(VS2017->File->New->Project), 我们先如图所示选(Console Application(Linux))模式, 测试VS Project方式的Linux工程.
如上图所示, 我们先在main.cpp中设置断点, 再点击运行程序的按钮:
会得到如上图所示的运行界面, 与常规的VS Windows程序开发过程相近, 需要注意的是红色箭头标注的Linux Console Window, 有需要的时候, 我们也可以通过Debug->Linux Console菜单项打开该窗体, 运行失败的时候, 该窗体可能会给出更具体的报错提示.
需要注意几点:
通过以上日志我们可以看到编译的具体过程, 一些编译过程中的报错也会直接在此处显示.
此处我们可以配置使用的远端SSH连接, 远程的工程目录等, 方便确认远端资源的有效性. 如上图所示, VS会自动帮我们拷贝并同步文件到远端/home/admin/projects/testlinuproj下, 如下图所示:
类同上面的Linux Project模式, 我们使用(VS2017->File->New->Project)菜单项来打开新建工程面板, 如上图所示, 我们创建的是一个跨平台的CMake项目, 默认是针对Windows平台的, 我们需要在接下来的操作中切换项目的目标平台并进行相应配置.
CMake方式创建的工程是一种特殊类型的工程, 是VS2017开始支持的一种叫”Open Folder” Project的类型, 与Sublime等通过文件夹对源代码进行组织和编辑的方式是对等的, 所以我们并不会在对应的工程目录下看到原来的*.sln和*.xxproj文件, 算是VS一项比较重大的进化, 对于利用CMake组织的源代码工程来说, 能够最大限度的减少大家重复性的组织工程和相关配置, 最简化开发过程, 具体的优缺点大家可以自行体会, 此处不再赘述.
点击此处, 我们会发现我们可以工作在两种工程视图下, 一种是文件夹模式,另外一种是CMake本身配置的Target模式.区别可以看下图来对比:
(文件夹模式)
(Cmake Target模式)
通过上图的对比, 我们可以看到CMake Target模式会自动帮我们列出不同Target使用的源文件, 方便我们阅读和编辑代码(注意, 此处不是按文件夹绝对路径来组织的树状结构)
此处要注意的是我们可以对启动项进行配置, 包括启动目录, 附加的命令行参数, 都可以进行相关配置. 具体方法如下图所示, 右击对应的CMake Target工程, 点击Debug and Launch settings菜单项.
系统会自动帮我们建立 launch.vs.json文件, 我们也可以直接访问工程目录下的.vs/launch.vs.json进行编辑。
重要的选项是cwd和args, 我们可能会修改这两项以适应我们的调试需求
我们除了直接启动对应程序, 也可以对已经在远程执行的程序进行挂接调试, 方法如下:
访问Debug->Attach To Process 菜单项, 打开Attach to Process面板
我们把Connection type如上图所示切换到SSH选项, 正确选择已经在之前的Connection Manager中配置的Connection target, 系统会自动列出当前在远程主机上执行的进程, 我们选择需要调试的进程Attach, 即可对该进程进行断点调试等操作, 与传统的EXE操作基本一致.