中国工业设计十佳公司,seo流程,如何建设网站和app,深圳营销网站建设公司最近一直在阅读ovs的源码#xff0c;看到用户态代码的时候#xff0c;需要对用户态的代码进行调试#xff0c;一开始想直接使用linux中的GDB进行调试#xff0c;但是ovs的工程太过于复杂#xff0c;从网上找了些文章#xff0c;发现vs2017能够支持linux c程序的调试…最近一直在阅读ovs的源码看到用户态代码的时候需要对用户态的代码进行调试一开始想直接使用linux中的GDB进行调试但是ovs的工程太过于复杂从网上找了些文章发现vs2017能够支持linux c程序的调试捣鼓了一下午遇到了一些坑终于搭建好了开发环境。
最新版的vs 2017支持linux环境编程与传统vs上的windows编程不同的是vs2017 所需要的Linux环境需要搭载在一个linux的服务器上vs 2017 相当于将windows系统和这个linux系统之间建立了某种映射可以将代码复制到linux中对应的目录中并且windows系统中的vs 2017能够看到运行的情况甚至是对代码进行断点调试。
开发环境
window 10操作系统vs 2017 community版VMware12.5.7
在VMware中安装ubuntu14桌面版
vs 2017的安装
官网下载地址https://visualstudio.microsoft.com/zh-hans/?rrhttps%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F
从官网下载最新的vs 2017在安装的过程中需要注意如果你需要搭建linux c环境需要勾选“使用c的linux开发”工具集见下图 配置ubuntu环境
在ubuntu中安装好c环境因为vs 2017需要通过ssh登陆ubuntu系统所以也需要安装好ssh服务命令如下
sudo apt-get install openssh-server g gdb gdbserver
开始ssh服务
sudo service ssh start
vs2017创建linux项目
打开vs2017步骤如下文件--新建项目--跨平台--linux-控制台应用程序(linux) 新建完成项目之后vs2017自动生成一个简单的maic.cpp文件
菜单栏选择 调试-cross platform-add 将刚才建立的Ubuntu服务器用户信息输入进去 右键解决方案可以看到当前程序的属性页面点击配置属性-常规-远程生成计算机选择刚刚新建的账户可以看到在该页面下默认的远程生成根目录在~/projects下面待会儿可以看到在ubuntu对应的目录下会生成项目的代码。 菜单栏选择调试-Linux Console打开linux程序的控制台 可以在程序中打断点点击调试按钮进行运行可以看到控制台打印出信息 登陆ubuntu在~/projects目录下面可以看到新生成的项目文件夹“test” 遇到问题
上述是一个简单的开发演示在实际的工作中代码可能很复杂。因为这几天在学习linux的IO多路复用机制从网上找了一个稍微复杂的通信程序代码来自于博客https://www.cnblogs.com/Anker/p/3261006.html源代码有一处错误需加上#include arpa/inet.h。这个程序的功能是客户端向服务器发送信息服务器接收输出并原样发送回给客户端客户端接收到输出到终端。其中使用一些linux中的库文件。
问题1 无法找到库文件
在博客https://www.cnblogs.com/xylc/p/6533716.html?fromandroidqq 看到一个解决方法将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模式后能正常使用。
最终运行结果
最终成功运行服务端和客户端程序先启动服务端再运行客户端下图中分别为服务端和客户端运行情况。当客户端再控制台输入信息服务端能接收并回传给客户端在控制台显示。 参考资料
部署、运行和调试 Linux 项目使用Visual Studio 2017作为Linux C开发工具
作者yearsj 转载请注明出处https://www.cnblogs.com/yearsj/p/9600682.html 因为当时写的是C项目但是VS默认都是C项目即使你把源文件改成.c编译也是按C编译所以两种方法一种Windows搭建gcc编译环境或者Linux编译 在编译C语言时有时会遇到这样的错误提示
true undeclared (first use in this function) or false undeclared (first use in this function)
就是说 bool, true, false 都是undeclared原因很简单因为真正的C中没有这些关键字c和早期的c里没有关键字bool使用BOOL可以但BOOL不是内置类型了都是通过typedef或者宏来定义的通常都会被定义成int类型。后来的c出现了内置类型bool值只能为true1和false0。
解决方法
1、将文件名.c改为文件名.cpp用C方式编译则没问题 2、自己进行一个宏定义 typedef enum __bool { false 0, true 1, } bool; c90是没有bool的因此支持c90的dev-c当然也没有。想在c90里用bool可以自行用宏进行定义。 c99支持bool用支持c99的编译器例如gcc就可以的。 #include stdio.h typedef enum __bool { false 0, true 1, } bool; void main() { bool b true; printf(%d\n,b); bool c false; printf(%d\n,c); }
转载于:https://www.cnblogs.com/muahao/p/7029113.html