记一次debug-gdb-ns2.35-ubuntu

自己写的ns2代码有问题 碰到除法 和 开根号。因为模拟时而报错时而不报错,尤其是节点数量多的时候报错频率高,自以为是不会碰到零或负数,自己的代码没问题,ns2报错是因为这个模拟器不行或者umolsr里面哪个参数有问题,现在回想真是可笑,c++写的软件好好的,凭什么你加了一点运算的代码就会报错。显然是你自己写的代码不行。
果然 碰到除法 和 开根号,自己没有去验证不会是零或负数。这是很糟糕的coding习惯。
ns模拟报错

好了,讲下gdb调试过程。
首先,ns2的makefile文件要关掉-O优化,开启-g调试。(debug完成后要改回去,不然模拟会非常慢)

然后gdb ns 进入gdb
(如果要在哪里打断点可以使用b命令)
我现在不知道错误在哪里,直接r olsr.tcl运行

然后gdb会卡在错误的地方
输入where 会显示完整的栈信息(可能显示不全,按回车键接着显示)
frame #0 替换0为你想进入的栈号,此时就可以进入栈里,看局部变量等信息p Rnode p speedIJ,进而做出进一步的分析
但是,如果不关掉-O优化,或者Makefile文件中 CCOPT = -Wall -g 添加-g;
调试可能仍会正常,但是会把临时变量从寄存器优化到内存,如果想要在调试过程中,打印变量值,就会提示“No symbol “×” in current context.

看到错误地点和变量值等信息,就可以推测为什么程序会出错,进而debug

over

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值