zoukankan      html  css  js  c++  java
  • 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的声明之前。
  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/zhangleiccst/p/2062289.html
Copyright © 2011-2022 走看看