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的声明之前。
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的声明之前。
- NS的调试
- NS的调试
- 使用Kdevelop4调试ns
- 在Ubuntu系统下使用Kdevelop调试NS的方法
- kdevelop 调试 ns 基于Ubuntu704
- 在Eclipse下调试NS
- [NS的编译调试]make 、make clean、make depend的区别
- NS:嵌入的Tcl
- OC的NS前缀
- ns的学习资料
- 为NS安装Kdevelop调试器
- GDB调试C++代码和NS代码
- NS
- NS编程与调试 - gdb调试工具
- NS编程与调试 - 内存调试工具 valgrind
- [ZZ]NS编程与调试 - gdb调试工具
- NS编程与调试 - gdb调试工具
- NS编程与调试 - 内存调试工具 valgrind
- 有线局域网拓扑结构――环型结构(三)
- [推荐] 转: 一个IT人士的个人经历,给迷失方向的朋友
- Mini-OS现有应用介绍
- 求任务
- 内核驱动 unresolved external symbol @__security_check_cookie@4
- NS的调试
- 有用吗?
- 小慨一番
- 感谢《微软中国》赠送的礼品!
- 如何卸掉grub
- C语言中的宏
- -jar参数运行应用时classpath的设置方法
- QT中窗口如何隐藏最大话按钮 和设置背景图片
- 使用Gilder/Levin替换技术替换文本