ns3下利用insight排查waf错误
参考原文:
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是一样的。