• NS的调试 (piyajee)


    接触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的声明之前。
  • 相关阅读:
    Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/***]]
    Server Tomcat v7.0 Server at localhost failed to start.解决方法
    JDBC数据库之添加数据
    angularJS通过post方法下载excel文件
    mybatis使用笔记
    java枚举类型使用笔记
    java8新特性笔记
    Enum枚举类型的使用笔记
    sql server备份还原数据时的问题记录
    SQL Server自增长列插入指定值 -- SET IDENTITY_INSERT ON|OFF(转)
  • 原文地址:https://www.cnblogs.com/zhangleiccst/p/2062289.html
Copyright © 2020-2023  润新知