使用Kdevelop4调试ns

本文介绍如何在Ubuntu系统下使用KDevelop调试NS2网络模拟器,并解决调试过程中遇到的各种问题,包括设置调试信息、解决断点无效问题及具体调试步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ubuntu12下,写了一个C++模块和tcl脚本,结果运行出现Segmentation fault错误,这一般是C++程序的问题。怎么调试呢?

使用Kdevelop4调试ns(kdevelop的安装在ubuntu的软件中心搜索可以找到),首先(不是必须的),在ns的Makefile文件中,把CCOPT = -wall 改为CCOPT = -wall -g,可以输出调试信息。

当Attach to process时,弹出Operation not permitted的错误,通过以下语句解决了:

sudo chmod +s /usr/bin/gdb

而用$ echo 0 > /proc/sys/kernel/yama/ptrace_scope或setting ptrace_scope to 0 in /etc/sysctl.d/10-ptrace.conf我没弄成功。

 

这时候,点菜单栏上Run->Continue让ns继续运行,然后在控制台的%提示符下,输入source ****.tcl,程序出现错误并暂停,可以看到kdevelop的输出窗口中用箭头显示了出错调用的地方。

我调试的时候又出了一个错误

(1)warning: no class variable ClassName::debug_

see tcl-object.tcl in tclcl for info about this warning.

将ns-default.tcl文件中加入  ClassName set debug_  0,重新编译即可.

调试出现的第二个错误:

(2)warning: using backward compatibility mode
         error when calling class OldSim: test.tcl

原来是在调试时应该输入source ******.tcl的,结果我输成了ns ******.tcl了,所以报了上面的错误。

 (3) terminate called after throwing an instance of 'std::length_error'
  what():  vector::_M_fill_insert

这个错误是说vector.resize(N)错了,可能是N太大了。 当然我们实际程序肯定不会让N弄得太大的,
这往往是因为N忘记了赋值或者从文件总读入N的数值没有读对,造成了N非常大。

 

调试ns代码还可以用gdb了。在终端输入gdb ns,然后输入r ********.tcl,就可以看到错误信息了,这个挺好用的。

 

 

 

下面是转载的kdevelop调试ns2的具体步骤

原文转自:http://www.baisi.net/redirect.php?tid=1617581&goto=newpost+自己实践
在Ubuntu系统下使用Kdevelop调试NS的方法:
其中包含了解决断点无效的问题。
1.在软件包管理那里选择Kdevelop的相关组件安装好
2.在NS目录下,对Makefile文件进行如下改动:
在代码里面添加调试信息:修改
Makefile(没有任何后缀的)将里面
CCOPT = -wall
#如果是 ns-allinone-2.28,这里是 CCOPT = -O2
STATIC =
LDFLAGS = $(STATIC)
LDOUT = -o $(BLANK)
改变为:
CCOPT = -wall -g #如果是 ns-allinone-2.28,这里修改为 CCOPT = -O2 -g
STATIC =
LDFLAGS = $(STATIC)
LDOUT = -o $(BLANK)
3. 然后重新编译
注意:以下步骤一个都不能少
Make clean
Make depend(我做一步时好像有错误提示,不过好像对结果没影响)
Make
(自己注:好像不需要make
install)。
4.把Makefile改名为Makefile.am
5.打开Kdevelop,选择"Project"->"Import Existing
Project"。在Directory里面选择NS的目录(Makefile所在的那个目录),Project
Name自己取一个名字,Project type选择"Generic C++ Application(Custom
Makefiles)".然后选"OK"。再选"Populate",搞定。
6.把Makefile.am
改回名字Makefile
之前碰到过断点设置无效的问题,后来发现是因为在Makefile里面没有加-g选项(即第二步)
之后就可以进行调试了:
1.在终端输入ns,回车。
2.在Kdevelop中选择菜单命令“Debug/Attach to process”,在对话框中找到刚刚运行的NS
进程,按OK
(自己注:这里碰到一个问题,一直提示没有kdevelop中定义的名字,将kdevelop中project的名字定义为ns就解决了,可以调试。)
3.在终端输入tcl命令,例如“source test.tcl”,回车。
4.设置断点(如果是在一开始就设断点的话是无效的)
5.然后选择Debug中的命令Continue让程序继续运行。就可以看到调试的结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值