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