【NS2】TCL debug (转载)

1.使用NS2进行模拟,就不可避免的会接触TCL/OTCL和C/C++。两者配合使用。一般设置场景啊,业务流啊,都使用TCL/OTCL来编写脚 本。要进行路由实验模拟的话,同一类的实验,这些脚本基本上是差不多的。所以其实没有必要在这种脚本语言上花费太多的时间。最主要的就是用C/C++来实 现自己的路由算法,这才是考验你基本功的地方。

2.算法出来之后,就开始模拟了。要使得自己写的新路由算法能在NS2上跑,就需 要修改一些文件,使得NS2能够认识你的路由算法。主要包括NS2_HOME/ns-2.30/tcl/lib/ns-lib.tcl, NS2_HOME/ns-2.30/tcl/lib/ns-packet.tcl,NS2_HOME/ns-2.30/common/packet.h。 具体的可以参考《NS与网络模拟》这本书。然后需要重新进行编译和运行。一般不可能第一次运行就通过,通常会出现各种各样的错误。但是NS2给出的错误信 息很有限,基本上没有起到任何帮助。这就需要进行调试。调试NS2脚本(TCL/OTCL)的工具tcldbg,调试C/C++的当然首推gdb了。

安装配置tcldbg的过程如下(都是在Linux下):

首先安装tcldbg:
./configure --with-tcl=<tclConfig.sh的目录>
make
make install
需要说明的是,我们要先找到NS2的tclConfig.sh文件所在的目录,通常是位于NS2_HOME/tcl*.*.*/unix/tclConfig.sh。

为了能在ns2中使用tcldbg,需要重新配置编译NS2,步骤如下:
./configure --with-tcldebug=/usr/local/lib/tcldbg2.0/ 
make
其中/usr/local/lib/tcldbg2.0/是tcldbg的lib文件安装目录,不同的系统可能不一样,同样先找到准确的位置。

这样,就可以在NS2中调试TCL/OTCL脚本了。设断点的方法是,直接在脚本文件中相应的位置加上debug 1。一些基本的命令如下:
s 单步执行(进入进程)
n 单步执行(不进入进程)
c 继续
r 继续执行直到从过程中返回
u 转至上级作用域
d 转至下级作用域
w 列出调用栈
b 设置,清除或显示断点
h 帮助

运行脚本,就会在相应的断点位置停下来,可以使用puts命令来打印输出各种变量的值。info也是一个我常用的命令。
info exists <variable>
<variable> info class //查询一个对象的类名
<variable> info instances //查询一个类的所有实例
<variable> info instprocs //查询一个类的所有实例过程
<variable> info vars
<variable> info superclass/subclass //查询一个类的超类/子类

如 果认为错误出在C/C++代码部分(通常都是这样),那么就需要用gdb进行调试了。一般UNIX和Linux都有gdb,可以直接使用。不过,要指出的 是,需要修改Makefile文件,重新编译代码,生成含有调试信息的程序,才可以进行调试。方法是在CCOPT宏上增加-g选项。调试过程如下:
首先,敲入gdb ns(进入调试),此时显示的应该是(gdb)
设置断点: b 文件名(xxxx.cc或者xxx.h):行数
运行tcl脚本: r 文件名(xxx.tcl)
调试命令:n,s
显示变量: p 变量名
删除断点 d 断点编号
查看断点信息: i b
还有很多其他命令,都可以通过h的帮助来查看。

注意:以上凡是涉及到文件名的地方一定要注意路径,而且是相对于当前gdb工作目录的相对路径。同样可以通过cd和pwd命令来修改和查看工作目录。

其实调试出现在C/C++部分的错误,我们可以先不设置断点,在gdb的环境下运行,一般都会显示出具体出错的地点,包括文件名和行数。然后我们在这里设断点,进行深入的调试。

我在实验模拟部分出现了多次“段错误”的错误,通过调试发现,均为对空指针进行了操作,导致了非法访问。

3.关于xgraph,其实比较简单,不过我发现网上查到的一些资料所介绍的部分内嵌命令并不起作用,或者并不一样。估计是版本发生变化的原因吧。
xgraph -x "x坐标的标题" -y "y坐标的标题" <xgraph的数据文件>
xgraph的数据文件格式如下:
TitleText: 所绘出图片的标题
"Alpha
x1      y1
x2      y2

"beta
x1      y1
x2      y2

其中Alpha和beta分别是两条折线的名称

时间: 2024-11-06 23:22:33

【NS2】TCL debug (转载)的相关文章

java 仿c/c++ 中#define #ifdef 的功能做Debug(转载)

转载自:http://livehappy.iteye.com/blog/865277 C代码 #define DEBUG 调试完成后只需将这个define命令行删除即可.有人可能觉得不用条件编译也可达此目的,即在调试时加一批printf语句,调试后一一将printf语句删除去.的确,这是可以的.但是,当调试时加的printf语句比较多时,修改的工作量是很大的.用条件编译,则不必一一删改printf语句,只需删除前面的一条“#define DEBUG”命令即可,这时所有的用DEBUG作标识符的条件

Release Debug 转载

Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来.当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等.习惯上,我们仍然更愿意使用VC已经定义好的名称.     Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M).至于是否需要DLL支持,主要看你采用的编译选项.如果是基于ATL的,则Debug和

freewrap——将tcl/tk脚本转变为可执行文件

FreeWrap可以把TCL/TK的脚本和二进制文件打包成应用程序,FreeWrap将所有的文件组合成一个单独的可执行文件. FreeWrap的原理是把脚本和tcl/tk解释器和库文件都打包在一个文件当中,做成一个可执行程序.生成的可执行文件实际上是一个压缩包,里面包含有需要使用的所有内容.不同的版本对应不同的tcl/tk版本,由于原始的tcl/tk版本只包括一些基本的库,所以如果需要使用更多的库,需要额外添加到文件中,还需要注意添加的方法和调用的顺序,如果是二进制的库就更麻烦了,需要额外的添加

【NS2】添加mUDP、mUdpSink和mTcpSink模块

根据柯老师的教材可知,mUDP是UDP的延伸,除了具有UDP的功能外,还能记录所发送的包的信息.mUdpSink可以把接收到的包的信息记录 到文件中.mTcpSink是TCPsink的延伸,除了具有TCPSink功能外,还能记录所发出的包的信息.具体的添加步骤如下: 1.下载mUDP, mUdpSink的文件,要下载的有下列几个文件:        mudp.cc.mudp.h.mudpsink.cc.mudpsink.h 下载地址:http://140.116.72.80/~smallko/n

【NS2】NS2 教學手冊(转载)

之前做毕设的时候搜索NS2的相关资料,发现这个里面涵盖很广,特此收藏,感谢原作者的辛勤劳作. NS2 教學手冊 ( NS2 Learning Guide) [快速連結區] My works  中文影音教學區  Q&A for my works  My Book  My Talks  Forum  Basic  ns2-installation  Tcl/Tk/Otcl  Debug  Trace Processing  awk/gawk  Gnuplot  perl  latex  Traffi

【NS2】NS2机制浅显分析一下(转载)

[我在之前看的是以ping协议为实例来理解TclCL机制和分裂对象模型] 本文以channel实例的创建过程为例,试图说明ns2的分裂机制,请在阅读本文前阅读<The NS Manual>有关分裂机制章节,由于篇幅有限,作者能力有限,本文章不能分析得非常彻底,时间仓促,有不当之处请大家给予批评指正. 一.定义信道基类 定义channel的 C++类 #ns-2.31macchannel.h class Channel : public TclObject { public: Channel(v

【NS2】cygwin+NS2.29安装之道 (转载)

最近接了一个需要进行网络模拟的项目.对与网络模拟一窍不通的本人算是一个挑战.于是乎开始整日上网搜索相关的资料,没想到这个世界的资源真是丰富多彩.最后发现了一个网络模拟的流行软件NS2,在经过多次尝试后,终于成功的安装并运行了该软件.下面就分享一下本人的安装经验.(本文特别综合了各种安装方法.并成功解决了如Cygwin没有生成home文件夹和.bashrc文件的问题以及提供了Cygwin的卸载方法) 首先如果想要了解NS以及相关内容,我力荐下面这个论坛,资源可以说相当的丰富,而且斑竹认真负责 ht

【NS2】使用SourceInsight阅读NS源代码全攻略(转载)

NS的源码底层是C++,采用了C++/Tcl分裂对象模型,架构完善,堪称OOP编程的典范.但是NS源码体系庞大,源文件有2千多个,阅读起来不是特别方便,我推荐使用SourceInsight3.5.具体的配置如下: 1. 下载安装SourceInsight,在这里我就不提供了,大家自己去搜吧.SourceInsight的正版单机价格是2500元人民币,呵呵,小小3M多的程序有这么大价值,其功能可见一斑. 2. 安装后,我们先进行一些配置,以便使得SourceInsight能够正确得识别NS的源文件

【NS2】NS2修改MAC协议(转载)

NS2版本:2.34 涉及NS2代码文件: ns-2.34/mac/channel.h ns-2.34/mac/channel.cc ns-2.34/mac/wireless-phyExt.h ns-2.34/mac/wireless-phyExt.cc ns-2.34/mac/mac-802_11Ext.h ns-2.34/mac/mac-802_11Ext.cc ns-2.34/mac/mac-802_11.h ns-2.34/mac/mac-802_11.cc ns-2.34/common