NS的调试

来源:互联网 发布:手机淘宝实名认证步骤 编辑:程序博客网 时间:2024/04/28 07:28
接触NS快一年了,但是还只能说是刚刚入了门,这一年里,从百思上确实学到了很多东西,NS的使用可能要告一段落了,有些心得体会跟大家分享一下,希望对还在入门的初学者有些帮助。主要是调试方面的,因为NS的代码太庞大了,因此出错后错误定位是非常重要的,有些可能不太对,还望各位高手指正。

1.1 使用GDB调试
在默认情况下不支持GDB调试,需要修改makefile.in:加上-g3选项
.cc.o:
       @rm -f $@
       $(CPP) -g3 -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc

.c.o:
       @rm -f $@
       $(CC) -g3 -c $(CFLAGS) $(INCLUDES) -o $@ $*.c

调试步骤:
1.  转到ns-2.29目录下,cd ns-2.29-allinone/ns-2.29
2.  gdb ns
3.  设置断点:b filename.cc:123
4.  r /root/xxx.tcl
常用调试命令:
n: 单步不进入
s:单步进入
c:执行到下一断点
bt:查看堆栈调用

1.2 TCL调试
如果要支持TCL调试,在configure时加上—enable-debug选项,但是只要打开了enbale-debug选项,编译器检查更加严格,warning一般都会报错。

1.3 使用KDevelop调试NS
老版的NS与网络模拟上有讲如何使用KDevelop调试NS,感觉还不错,使用起来跟VC差不多,相比命令行的gdb方便很多。
1.  新建NS工程
NS安装好后,把ns-2.29目录下的makefile另存为makefile.am,然后选择Project|Generate Project File,找到ns-2.29目录,按OK就可以自动生成工程了。
2.  调试步骤
在控制台运行ns;
选择Debug|Start(other)|Attach to process,在对话框中找到NS进程,按OK将调试器和NS进程绑定;
选择Debug|Run
设置断点;
在控制台输入命令:source /root/xxx.tcl
Kdevelop中有输出窗口可以查看当前的调用栈,在watch选项卡中可以查看变量的值。

调试心得:
1.  Segmentation Fault,段错误这类出错的原因多数都是使用了空指针,一般调试的时候只要正确设置断点,比较容易进行错误定位。
2.  程序无错跳出,一般是执行了abort()跳出来的,单步跟踪一下不难找到问题;
3.  程序无错但停不下来,一般是进入了死循环,这时可以选择Debug|Interrupt,让程序停下来,就可以找到在哪里死循环了。
4.  一般出现*_o*** cmd都是对应C++类的Command函数有错。在Command中各命令的排列先后顺序也有讲究,如果出现了*** lookup failed很有可能需要调整下命令的顺序,比如在使用TclObject *obj之前,一般需要判断obj是否存在,obj=TclObject::lookup(argv[2])==0,如果不需要用到obj的可以该命令放在obj的声明之前。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在校读书的留守儿童怎么办 足球比赛中裁判碰到球怎么办 花盆的土变硬板结怎么办 lol皮肤不想要了怎么办 泉州小黄人自行车被偷怎么办 小学数学没学好上初中怎么办 50天的宝宝缺钙怎么办 5个月的宝宝缺钙怎么办 空调接电后指示灯不亮怎么办 欧普led灯坏了怎么办 led灯条芯片坏了怎么办 太阳能板只有电压没有电流怎么办 农村按空调房屋不保温怎么办 自己一个人想去足疗店不敢去怎么办 吊灯led灯坏了怎么办 办健身卡老板携款跑路了怎么办 武安丰尚健身怎么办卡 热敷后眼睛肿了怎么办 两眼视力差距大怎么办 怀孕体重长得快怎么办 怀孕初期发胖6斤怎么办 孕早期长得太快怎么办 怀孕了肚子眼脏怎么办 孕38周孩子偏小怎么办 孕初期胖的厉害怎么办 怀孕干活累着了怎么办 怀孕了上班很累怎么办 孕妇胖的太快怎么办 孕妇长得太快怎么办 眼睛一按吱吱响怎么办 孕期太胖了怎么办啊 人流后子宫复位不好怎么办 怀孕初期有盆腔积液怎么办 怀孕了有盆腔积液怎么办 多囊怀孕不想要怎么办 6个月婴儿大小眼怎么办 健身教练岁数大了以后怎么办 超变战陀玩具手柄坏了怎么办 飓风战魂三陀螺中轴坏了怎么办 怎么办晚安角和铁陀螺 白衣服染上荧光剂了怎么办