ns3下利用insight排查waf错误

来源:互联网 发布:大数据与彩票 编辑:程序博客网 时间:2024/04/29 00:46

参考原文:

https://www.nsnam.org/wiki/HOWTO_understand_and_find_cause_of_terminated_with_signal_errors

insight介绍:

         Insight是一个Tcl/Tk编写的gdb的图形用户接口,它是由在Redhat以及Cygnus的工程师写的。Redhat大方的将其捐赠给大众使用,甚至不时的提供人力继续完善它的功能。Insight项目始于1994年,至今已经有颇为成熟,它能很好的发挥大部分gdb的强大功能。官方网站http://www.sourceware.org/insight/index.php,最新的版本为2009年更新的6.8-1。

系统环境:kali 1+ ns3

1.  安装insight

1.1 安装必要依赖库:

sudo apt-get build-dep gdb
sudo apt-get install tk tcl libx11-dev xinit

1.2 下载:

wget ftp://sourceware.org/pub/insight/releases/insight-6.8-1a.tar.bz2

1.3 解压:

bizp2 -d insight-6.8-1a.tar.bz2; tar xvfinsight-6.8-1a.tar

1.4 安装:

mkdir $HOME/install

cd  $HOME/insight-6.8-1

mkdir build

cd  build

../configure --prefix=$HOME/install --disable-werror

make

make install

2.  配置系统环境参数

    在终端中运行vi ~/.bashrc命令,将/root/install/bin加入PATH变量中。如果存在着TCL_LIBRARY变量,则将其注释掉。

    source /root/.bashrc  //重新读取

    如果之前设置过环境TCL_LIBRARY、ITCL_LIBRARY变量,删除掉。

    unset TCL_LIBRARY

    unset ITCL_LIBRARY

3.  运行insight

4.  正常运行。

vi /root/ns-allinone-3.22/ns-3.22/scratch/hs.cc

#include "ns3/core-module.h"

 NS_LOG_COMPONENT_DEFINE ("HelloSimulator");

 using namespace ns3;

   int

 main (int argc, char *argv[])

 {

   NS_LOG_UNCOND ("Hello Simulator");

   //1.系统保留区地址0写入数值0,可引发保护性错误

   //*(char *)0 = 0;

   //2.下两行代码可引发除0错误

   // int i0 = 0,i1 = 1;

   //NS_LOG_UNCOND (i1 / i0);

   //3.下一行代码可引发reproducible bug

   //return 1 ;

}

5.  错误排查示例1:

取消"//*(char *)0 =0;"前的注释,运行hs.cc脚本,则会出现以下terminated with signal SIGSEGV问题。

    在终端中,运行waf --run scratch/hs --command-template="insight %s"命令,会跳出图形界面,如下所示。

 

    首先点击“运行”按钮,接着点击“继续”按钮,就有“接收到错误”的提醒,如下所示。

   

 

   

 

    点击“ok”按钮,就可以定位到出现此错误的代码处,如下所示。

   

6.  错误排查示例2和示例3,排查过程跟错误排查示例1是一样的。