利用Eclipse对NS2进行断点调试

来源:互联网 发布:洗脑神曲排行榜 知乎 编辑:程序博客网 时间:2024/05/17 02:18

注:原文在博客大巴发表,现搬迁至CSDN。

如今网络模拟的软件很多,现在我用的是NS2,原因是NS2是自己接触最早的,也是最早折磨自己的。关于不同款网络模拟软件的比较,网上有很多的帖子,我在这里就不一一叙述了.为什么说NS2比较折磨人呢。1.该款软件的安装过程比较复杂,安装在windows中更加复杂,我并不想在windows安装Cygwin来引进更加麻烦的环境配置,所以我选择了在linux环境中按转NS2,安装的整个过程是不断的根据报错改错。2.当你安装完毕,运行tcl文件,看到网络仿真图,你正想松一口气,但是你又在想,tcl运行的时候底层的C++是如何运作的?可能你想到GDB调试了,但是用惯了VS的我,用VIM看整个的工程代码还是很吃力的,有没有更好的方法去看整个的工程代码呢? 这就是本篇文章所要解决的问题。

怎样用Eclipse调试NS2

前提:拥有安装好了NS2的linux系统。

阶段一. 制作ns的debug版本

首先,请看一下ns-allinone-2.29/ns-2.29/ns 文件的大小,最初的大小只有几M,因为这时ns不是debug模式,所以这时即便将整个的ns-allinone-2.29导入Eclipse,也是无法进行调试的。这时要做的是更改ns为debug模式,ns是与tcl,tk,otcl,tclcl相关联的,需要想更改这后的这四个文件熟悉为debug模式,然后再更改ns为debug模式,才能真正的使用Eclipse对NS2进行调试。tcl,tk,otcl,tclcl之间是有相互依赖关系的,重新编译的时候应当注意先后顺序,并把生成的debug版本的静态链接库文件复制到ns-allinone-2.29/lib/目录下。

/****************************************************************************************************************************************/

以下内容来源:http://hi.baidu.com/aoxinguy/item/c85238cfa6d0fd25e80f2e7a

/生成NS可执行文件时所需要的几个静态链接库(有四个自定义的)
G++ NS 
-L/home/lab/workdir/ns-allinone-2.31/tclcl-1.19 -ltclcl 
-L/home/lab/workdir/ns-allinone-2.31/otcl-1.13 -lotcl 
-L/home/lab/workdir/ns-allinone-2.31/lib -ltk8.4 
-L/home/lab/workdir/ns-allinone-2.31/lib -ltcl8.4
-lnsl
-ldl 
-lm 
-lm

/这四个自定义的库,生成时所需要依赖的库

tclcl

-L/home/lab/workdir/ns-allinone-2.31/otcl-1.13 -lotcl
-L/home/lab/workdir/ns-allinone-2.31/lib -ltk8.4 
-L/home/lab/workdir/ns-allinone-2.31/lib -ltcl8.4

Otcl (注意 make clean 会将Makefile也删除去,因此,因先make clean,然后再./configure --enable-debug)

-L/home/lab/workdir/ns-allinone-2.31/lib -ltk8.4 
-L/home/lab/workdir/ns-allinone-2.31/lib -ltcl8.4 
-lXext -lX11 -lnsl -ldl -lm

TK

-L/home/lab/workdir/ns-allinone-2.31/tcl8.4.14/unix -ltcl8.4
-L/home/lab/workdir/ns-allinone-2.31/tcl8.4.14/unix -ltclstub8.4

Tcl

MATH_LIBS   = -lieee -lm
LIBS   = -ldl $(MATH_LIBS)

故NS2所依赖的这四个静态库的重新编译顺序为:
Tcl -> TK -> Otcl -> tclcl

感谢作者,在我最不知所措的时候看了你的文章给了我启发。

/********************************************************************************************************************************************/

下面,按照依赖顺序,依次编译静态链接库:

Tcl

修改/ns-allinone-2.29/tcl8.4.11/unix/Makefile文件。从

# To change the compiler switches, for example to change from optimization to
# debugging symbols, change the following line:
#CFLAGS    = $(CFLAGS_DEBUG)
#CFLAGS    = $(CFLAGS_OPTIMIZE)

#CFLAGS    = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
CFLAGS    = $(CFLAGS_OPTIMIZE) -DTCL_DBGX=$(TCL_DBGX)

修改为 
# To change the compiler switches, for example to change from optimization to
# debugging symbols, change the following line:
#CFLAGS    = $(CFLAGS_DEBUG)
#CFLAGS    = $(CFLAGS_OPTIMIZE)
CFLAGS    = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
#CFLAGS    = $(CFLAGS_OPTIMIZE) -DTCL_DBGX=$(TCL_DBGX)

之后,在当前目录下 make clean , make。将新生成的libtcl8.*.a 和libtclstub.*.a 两个静态库文件,复制到nsallinone*/lib目录下。

TK

方法与Tcl一致,make后将新生成的同样,将新生成的静态库文件加入到lib目录下。

Otcl

进入Otcl目录make clean,修改一下configure文件,将SHLIB_LD="ld -shared"修改为SHLIB_LD="gcc -shared"。

 然后再生成Makefile文件,如下:

$./configure --enable-debug

最后:$make

同样将生成的静态链接库文件加入到lib中。(此处原帖中未说明)

tclcl

make clean

./configure --enable-debug

make

同样将生成的静态链接库文件加入到lib中。(此处原贴中未说明)

至此,ns所依赖的静态链接库已经编译完毕,现在可以重新编译ns文件了。

在ns-2.29目录中,修改Makefile文件信息,在CCOPT选项中加入-g。

在这里,我不建议使用./configure --enable-debug,这会在CCOPT中加入新的-Wno-parentheses -Werror。

在编译的时候,很多以前的warning信息会变成error.之后再make clean ,make

现在检查ns文件的大小,发现已经变为20M左右。

至此,ns的debug版本制作完毕。

阶段二.将ns2工程导入Eclipse

下载eclipse-cpp-juno-SR2-linux-gtk-x86_64

安装jdk,配置环境/etc/profile

具体做法:启动Eclipse时 ,在出现的框中选择ns-allinone-2.29所在的目录。
 新建C++  makefile工程:在project Explorer中右键,新建C++工程;输入工程名字ns-2.29(会提示你覆盖原来的文件夹,没事的), 设置工程属性,位置是ns的安装目录即:/yourname/ns-allinone-2.29,类型是Makefile Project -> Empty C++ Project,tool chain 选linux GCC,点击finish.

设置Run属性:右击项目名称,选择 properties, 在出现的属性页的左边选 Run/Debug Settings, 点击右边的New按钮,在随即弹出的窗口中选中C/C++ Local Application, 点击OK按钮,会弹出一个Properties for New_configuration的框,在Main页的C/C++Applicaion中选择NS的可执行文件即可。

运行: 做好以上设置后可以编译,并运行ns。编译时在Eclipse中点击project-> clean, project->build all, 编译需要大约10分钟左右的时间。运行可点击工具栏中的Run ns-2.xx Default  按钮来运行。 运行后Console中的提示符变为%,此时可在Console中执行NS命令。比如可输入:
Puts “Hello NS2”
会输出: Hello NS2
这表明在Eclipse中调试NS基本成功了。

还可以添加tcl脚本目录来运行相关的文件。由于ns以及相关的执行文件都制作了debug版本,因此,现在可以进入函数体进行调试了。enjoy it !

同时也要感谢以下博客,解答了我的不少疑惑:

http://hi.baidu.com/aoxinguy/item/37def70e269148ce9157187e

http://blog.csdn.net/bennyfun79/article/details/5652179

http://www.cnblogs.com/zhangleiccst/archive/2011/05/29/2062284.html


本文完