自己写的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
本文分享了作者在使用NS2进行网络模拟过程中遇到的问题及解决经验。重点介绍了如何通过关闭编译优化并启用调试选项来定位涉及除法和平方根运算导致的错误。此外,还详细说明了使用gdb进行调试的具体步骤。
1050

被折叠的 条评论
为什么被折叠?



