Linux:GDB调试NS2项目详细步骤

来源:互联网 发布:java tar.gz 编辑:程序博客网 时间:2024/05/24 03:55

一、TCL的调试(ns-2.30)
用的比较少,一般用tcl-debug或者tkcon

二、Gdb的调试——即C++代码的调试(segment fault)
调试工具gdb(Source insight本质上也是调用gdb)

(1)、需要先在NS2中添加调试信息

1. 在~ns-2.30下的Makefile文件中添加-g,(注意要在root用户下写该才能保存)如下:

CCOPT   =  -Wall -g

(注:若这里不加-g调试可能仍会正常,但是会把临时变量从寄存器优化到内存,如果想要在调试过程中,打印变量值,就会提示“No symbol "×" in current context. ")

STATIC  =

#LDFLAGS    = $(STATIC)

LDFLAGS =

LDOUT   = -o $(BLANK)


2、修改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

3、然后重新编译:
make clean
make depend  # 执行这个命令过程中如出错,不用管!
make

(2)、gdb调试NS2
以命令行为例
转到ns-2.30目录下,cd  ~/test/Aqua-Sim-1.0/ns-2.30/
[easie@localhost ns-2.30]$   gdb ns       //输入gdb ns
(gdb)




即进入调试

通过pwd命令可以获得当前路径,通过cd命令可以改变路径。

            a. 设置断点:(gdb) b filename.cc:123

            b. 运行调试:(gdb) r  /path/xxx.tcl    or   (gdb) run /path/xxx.tcl


(还是在ns-2.30目录下)这里设置为:(gdb) b uwaloha.cc:14

                                                           (gdb) r  underwatersensor/uw_tcl/aloha-test.tcl






这里filename.cc是需要设置断点的进行调试分析的程序文件,后面的数字表示断点在文件中的哪一行,path是文件所在路径,xxx.tcl是调试的tcl脚本文件。




3)调试常用命令

                  n/next:单步不进入
                  s/step:单步进入
                   c/continue
:执行到下一断点
                   finish: 已经进入了某函数,而想退出该函数回到它的调用函数中
                   bt:查看堆栈调用
                   print:显示数据,查看各个变量或者表达式的值
                   whatis:显示变量的类型
                   clear:删除设置在特定文件、行上的断点,如clear FILENAME:NUM
                   file FILE:装载指定的可执行文件进行调试
                   help NAME:显示指定命令的帮助信息
                   info break:显示当前断点清单,包括到达断点的次数等
                   info files:显示被调试文件的详细信息
                   info func:显示所有的函数名称
                   info local:显示当前函数中的局部变量信息
                   info prog:显示被调试程序的执行状态
                   info var:显示所有的全局和静态变量名称
                   kill:终止正在调试的程序
                   list:显示源代码段
                   make:在GDB中运行make工具
                   其他略。

断点的管理:

           a.  显示当前gdb断点信息
                    (gdb) info break        or        (gdb) info b
            b. 删除某个指定的断点
                   (gdb) delete breakpoint 1          删除编号为1的断点
                   (gdb) delete b              删除所有断点
           c. 禁用某个断点
                   (gdb) disable breakpoint 1
           d. 允许使用某个断点
                   (gdb) enable breakpoint 1
            display var,显示变量var的值

4)NS2中调试技巧
场景测试
参数设置:为了使模拟更接近真实网络,参数选择,非常重要!可以参看相关论文
简单测试: 用两三个节点测试一下首发数据,根据trace文件分析。
功能测试:测试每一个功能,对于无线网络的,要测试多跳,各种拓扑。利用trace分析结果