【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分别是两条折线的名称
【NS2】TCL debug (转载)的更多相关文章
- [NS2]TCL语言基本语法
(来自:<NS2仿真实验-多媒体和无线网络通信>) 1. 变量(Variable)和变量替换(Variable Substitution) tcl变量是在第一次使用set的指令来指派变量的 ...
- freewrap——将tcl/tk脚本转变为可执行文件
FreeWrap可以把TCL/TK的脚本和二进制文件打包成应用程序,FreeWrap将所有的文件组合成一个单独的可执行文件. FreeWrap的原理是把脚本和tcl/tk解释器和库文件都打包 ...
- 【NS2】添加mUDP、mUdpSink和mTcpSink模块
根据柯老师的教材可知,mUDP是UDP的延伸,除了具有UDP的功能外,还能记录所发送的包的信息.mUdpSink可以把接收到的包的信息记录 到文件中.mTcpSink是TCPsink的延伸,除了具有T ...
- 解除TCL电视系统禁止adb安装
我的问题:tcl电视能使用adb连接成功,但使用adb install安装软件时,提示错误 解决问题如下: $adb shell,输入:1. $setprop persist.tcl.debug.in ...
- jmeter sampler maven项目排错记
eclipse 创建的maven项目,引入jar包之后出现红色叹号,一直找不到原因,连main方法都无法运行,提示找不到类: 错误: 找不到或无法加载主类 soapsampler.SoapSample ...
- 【NS2】NS2 教學手冊(转载)
之前做毕设的时候搜索NS2的相关资料,发现这个里面涵盖很广,特此收藏,感谢原作者的辛勤劳作. NS2 教學手冊 ( NS2 Learning Guide) [快速連結區] My works 中文影音 ...
- 【转载】TCL装载包和版本控制
转载来源:http://blog.chinaunix.net/uid-9967220-id-3033702.html package forget ?package package ...? ...
- JMeter调试工具--Debug Sampler(转载)
转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...
- Jmeter学习(三十二)调试工具Debug Sampler(转载)
转载自 http://www.cnblogs.com/yangxia-test 一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug S ...
随机推荐
- ios h5 出现的问题
这几天在测试的时候,忽然发现手机ios 页面中的input 样式出现问题,安卓就没事. 实际应该是第一张图,在ios中出现的结果为第二张图 出现这个原因,主要是ios系统自带的设置,解决方法为 ...
- 在VUE中使用Echarts
第一步:下载echarts npm install echarts --save 第二步:在项目中main.js引入 import echarts from 'echarts' Vue.prototy ...
- socket.io的基本使用
服务端: 1.监听客户端连接: io.on("connection",socket=>{ }); 不分组数据传输:传输对象为当前socket 2.1给该socket所有客户端 ...
- 玩转gulp之压缩打包热重载
上节上上节我们讲了gulp的sass编译和watch监听,动态加载 这样我们就可以做到,我管我写我的sass然后保存,自动编译,就好像我们在写css一样,这是一个自动化的一大步.我们呱唧呱唧. 我们已 ...
- web端的兼容性测试
目前主流的浏览器有:chrome.firefox.safari.IE edge.Opera等.其中IE edge ,Google浏览器 和firefox被称为现代浏览器. 浏览器排行榜2019年4月浏 ...
- 看完就会用的GIT操作图解分析
无论你是前端还是后台,无论是运维还是移动端研发,GIT是逃避不了的东西,当然你说你要用SVN,那不在这次的讨论范围之内.不多说,请看下文GIT图解分析,10分钟学会git操作,当然下面的教程是为实战为 ...
- jnhs-springmvc 请求组合不正确,比如请求路径出现两次
初学springmvc 向后台传参数,结果发现,一直404 404后没有路径,说明 没有进入controller 仔细一看,请求路径不对,重复出现 页面是这样写的 页面是这样写的 原因是,请求链接和当 ...
- 实用Jupyter Notebook扩展工具——提升你的工作效率
Jupyter Notebook 现已成为数据分析,机器学习的必备工具.因为它可以让数据分析师集中精力向用户解释整个分析过程.通过安装一些扩展工具,可以让你在Jupyter Notebook上的工作效 ...
- 2019.10.25 csp-s模拟测试86 反思总结
继续存档 早上来补了一下昨天的题,不过肯定这两天的没法完全补起来 T1: 经典思路:关于位运算的题讨论每一位的贡献 #include<iostream> #include<cstdi ...
- java-文件切割合并_对象的序列化
一 文件的操作 1.1 概况 1,切割文件的原理:一个源对应多个目的:切割文件的两种方式. 2,碎片文件的命名和编号. 3,程序代码体现. 4,如何记录源文件的类型以及碎片的个数(建立配置信息文件)( ...