vs2017搭建linux c++开发环境

最近一直在阅读ovs的源码,看到用户态代码的时候,须要对用户态的代码进行调试,一开始想直接使用linux中的GDB进行调试,可是ovs的工程太过于复杂,从网上找了些文章,发现vs2017可以支持linux c++程序的调试,捣鼓了一下午,遇到了一些坑,终于搭建好了开发环境。html

最新版的vs 2017支持linux环境编程,与传统vs上的windows编程不一样的是,vs2017 所须要的Linux环境须要搭载在一个linux的服务器上,vs 2017 至关于将windows系统和这个linux系统之间创建了某种映射,能够将代码复制到linux中对应的目录中,而且windows系统中的vs 2017可以看到运行的状况,甚至是对代码进行断点调试。linux

开发环境

window 10操做系统,vs 2017 community版,VMware12.5.7android

在VMware中安装ubuntu14桌面版c++

vs 2017的安装

官网下载地址https://visualstudio.microsof...shell

从官网下载最新的vs 2017,在安装的过程当中须要注意,若是你须要搭建linux c++环境,须要勾选“使用c++的linux开发”工具集,见下图编程

![1536226923693](C:UsersyearsjAppDataLocalTemp1536226923693.png)

配置ubuntu环境

在ubuntu中安装好c++环境,由于vs 2017须要经过ssh登录ubuntu系统,因此也须要安装好ssh服务,命令以下:ubuntu

sudo apt-get install openssh-server g++ gdb gdbserver

开始ssh服务:segmentfault

sudo service ssh start

vs2017建立linux项目

打开vs2017,步骤以下,文件-->新建项目-->跨平台-->linux->控制台应用程序(linux)windows

![1536227503339](C:UsersyearsjAppDataLocalTemp1536227503339.png)

新建完成项目以后,vs2017自动生成一个简单的maic.cpp文件服务器

菜单栏选择 调试->cross platform->add 将刚才创建的Ubuntu服务器用户信息输入进去

![1536227686362](C:UsersyearsjAppDataLocalTemp1536227686362.png)

右键解决方案,能够看到当前程序的属性页面,点击配置属性->常规->远程生成计算机,选择刚刚新建的帐户,能够看到,在该页面下,默认的远程生成根目录在"~/projects"下面,待会儿能够看到在ubuntu对应的目录下会生成项目的代码。

![1536227757742](C:UsersyearsjAppDataLocalTemp1536227757742.png)

菜单栏选择调试->Linux Console打开linux程序的控制台

![1536228027639](C:UsersyearsjAppDataLocalTemp1536228027639.png)

能够在程序中打断点,点击调试按钮进行运行,能够看到控制台打印出信息

![1536231377041](C:UsersyearsjAppDataLocalTemp1536231377041.png)

登录ubuntu,在~/projects目录下面能够看到新生成的项目文件夹“test”

![1536231585700](C:UsersyearsjAppDataLocalTemp1536231585700.png)

遇到问题

上述是一个简单的开发演示,在实际的工做中,代码可能很复杂。由于这几天在学习linux的IO多路复用机制,从网上找了一个稍微复杂的通讯程序,代码来自于博客https://www.cnblogs.com/Anker...,源代码有一处错误,需加上#include <arpa/inet.h>。这个程序的功能是客户端向服务器发送信息,服务器接收输出并原样发送回给客户端,客户端接收到输出到终端。其中使用一些linux中的库文件。

问题1 没法找到库文件

在博客https://www.cnblogs.com/xylc/... 看到一个解决方法,将ubuntu下面/usr/include、/usr/local/include等目录复制到vs的linux header path(在个人机器中,地址为C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr)。

问题2 gdbserver模式没法使用

vs2017进行调试有两种方式,gdb和gdb-server,能够在菜单栏 调试->配置属性->调试->调试模式中进行配置,关于这两种模式的不一样,官方文档的解释以下:

  • 在“gdbserver”模式中,GDB 在本地运行,链接到在远程系统上运行的 gdbserver。 请注意,这是 Linux 控制台窗口惟一支持的模式。
  • 在“gdb”模式中,Visual Studio 调试器驱动远程系统上的 GDB,若是 GDB 的本地版本与目标计算机上安装的版本不兼容,则远程系统上的 GDB 更易兼容。 |

从网上找了不少的资料,从新更新了ubuntu中的gdbserver,结果仍是不行,由于我以前使用的是ubuntu17的server版本,无奈使用ubuntu14的桌面版,问题立马获得解决,目前仍然不知道gdbserver模型为何没法使用,若是有路过的大神看到,但愿评论区能够留言。

问题3 错误Stopped (tty input)

在运行gdb模式下运 行客户端的时候,客户端从控制台接受数据的那一段代码报Stopped (tty input)错误,经过看官方文档发现gdb模式不支持控制台交互,改为gdbserver模式后能正常使用。

最终运行结果

最终成功运行服务端和客户端程序,先启动服务端,再运行客户端,下图中分别为服务端和客户端运行状况。当客户端再控制台输入信息,服务端能接收,并回传给客户端在控制台显示。

![1536234398774](C:UsersyearsjAppDataLocalTemp1536234398774.png)

![1536234424691](C:UsersyearsjAppDataLocalTemp1536234424691.png)

参考资料

部署、运行和调试 Linux 项目

使用Visual Studio 2017做为Linux C++开发工具

做者: yearsj
转载请注明出处: https://segmentfault.com/a/11...
相关文章
相关标签/搜索