怎样配置开发环境来调试SDN应用程序

“工欲善其事,必先利其器”。我们在基于某一个控制器开发SDN应用程序的时候,常常会遇到这样的问题,怎样去调试一个应用程序。

相信大家第一个程序开发是基于集成开发环境,比如Visual C++,Codeblocks,Eclipse等,因为这些工具能够提供非常方便的界面来帮助我们调试代码,包括各种编译选项的配置和调试时候观察变量和内存的情况。

后来,随着我们开发经验的提升,逐渐接触到了GDB或者PDB等工具,但是个人以为,这些命令行工具比起来集成开发环境来讲还是不太方便。

相信大多数想上手SDN的同学也会遇到这样的困扰,在我最初调试SDN应用程序时候,因为程序的规模有限,所以把所有自己想要得到的变量输出即可,但是,随着代码规模的增大,每次通过观察LOG输出已经不能满足需求,所以,需要一个集成工具的支撑。

首先我想到的是Eclipse,因为这个工具实在是太强大了,几乎所有的东西都可以配置,而且主流的语言都可以很方便的通过界面进行插件安装,例如PyDev。

其实网上已经有人问过这个问题(http://sourceforge.net/p/ryu/mailman/message/33550406/),但是通过搜索还没有得到很好的解答,因此,我觉得这边文章应该对大家还是特别有帮助的。

本文主要讲述如何在Eclipse中搭建基于RYU控制器的开发环境。

0. 众所周知,Ryu是基于python编写的,那么在进行下面的步骤之前,大家需要自己首先配置和安装python环境。

我使用的平台是Ubuntu 14.04 64位的操作系统。因为在做SDN开发的同时,我还会写一些C++的代码,所以,我我选择的是Eclipse Mars 4.5.0 for C++ Developers版本。当然,大家如果想选择Java开发版本或者其他版本都可以的。

在Ubuntu下截图个人感觉确实没有Mac和Windows方便,尤其是下拉菜单的截图,用ubuntu自带的工具好像弄不了,所以使用了一个叫做Shutter的工具。这款工具功能还是挺强大的,建议大家可以使用一下。

1.我们在Eclipse的主界面中点击菜单中的Help(如上图所示),然后选择“Install New Software”

Eclipse Mars这个版本自带的软件库相对比较全,按照上图的配置搜索git即可。Git工具的主要意义在于能够方便的从GitHub上直接导入源代码到eclipse中,当然,如果大家愿意先下载源码到本地的话也可以省略这一步。

2.继续按照上面安装软件的步骤安装PyDev,这是eclipse下面向python应用程序开发的插件,如下图所示,直接默认下一步到安装完成即可,待软件安装完成时可能会需要重新启动eclipse。

3.新建一个PyDev项目,如下图所示:

4.导入Ryu源代码到新建的PyDev工程中。

右键项目,选择Import,下拉菜单中可以看到

选择“Clone URI”,然后next。

输入URI:https://github.com/osrg/ryu,如上图所示:

然后点击next,进入下一步后选择master分支,最后确定并将源代码导入到eclipse中。

5.编译源代码。

这个时候有两种方法可以编译和安装Ryu的源代码,一个是直接在命令行里进行编译和安装,一个是在eclipse中进行配置。 方法1:在命令行中,可以直接cd到Ryu源代码的目录中,然后按照readme中的提示python setup.py build和python setup.py install即可。

方法2:在eclipse中, 右键项目setup.py,选择run as->run configurations,然后arguments中写入build即可。编译之后会自动在工程中出现build的目录,其中包含了所有Ryu的功能。

6.运行最简单的基于Ryu的Hub应用程序,这是很多Ryu教程中最为基础的一个例子。

右键bin目录下的ryu-manager, 选择run as->run configurations,配置主函数入口和参数,如下图所示:

其中,simple_switch_13.py可以到ryu源码中按照图片中的路径进行查找。

7. 接下来,右键ryu-manager,选择run as->1 python run即可运行该应用程序。

8. 若想动态调试simple_switch_13.py这一程序,可以直接在eclipse中打开该程序并设置断点,右键ryu-manager,选择debug as->1 python run即可。

确认即可进入调试界面。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2015-09-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端说吧

sublime--package control的配置与插件安装

50890
来自专栏极客慕白的成长之路

HTTP协议原理及实践

HTTP是在应用层,基于传输层 0x1 低三层 物理层主要作用是定义物理设备如何传输数据 数据链路层在通信的实体间建立数据链路连接 网络层为数据在结...

13030
来自专栏北京马哥教育

超清晰的 DNS 原理入门指南

来源:阮一峰的网络日志 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 是互联网核...

37060
来自专栏精讲JAVA

RESTful API 最佳实践(阮一峰)

它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。

19240
来自专栏即时通讯技术

新手入门:史上最全Web端即时通讯技术原理详解前言 学习交流 更多资料一、传统Web的通信原理二、传统通信方式实现IM应用需要解决的问题三、全双工低延迟的解决办法 五、WebSocket结束语

浏览器本身作为一个瘦客户端,不具备直接通过系统调用来达到和处于异地的另外一个客户端浏览器通信的功能。这和我们桌面应用的工作方式是不同的,通常桌面应用通过sock...

10330
来自专栏java一日一条

最全面的 DNS 原理入门

DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。

12720
来自专栏小文博客

Centos服务器下载百度云资源——wget

3.6K50
来自专栏java思维导图

RESTful API 最佳实践(阮一峰)

它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。

74720
来自专栏容器云生态

Openstack平台搭建之第一天 基于RDO方式搭建

openstck基于web方式的rdo部署 If you have any question ,please contact me by weichuangxx...

347100
来自专栏极客慕白的成长之路

HTTP协议原理及实践

HTTP是在应用层,基于传输层 0x1 低三层 物理层主要作用是定义物理设备如何传输数据 数据链路层在通信的实体间建立数据链路连接 网络层为数据在结...

11430

扫码关注云+社区

领取腾讯云代金券