当前位置: 首页 > 工具软件 > KDevelop > 使用案例 >

kdevelop怎么调试_使用Kdevelop4调试ns

马淇
2023-12-01

在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文件中加入 ClassNameset 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让程序继续运行。就可以看到调试的结果了

 类似资料: