添加路由协议后,经常会出现以下错误,其实还是协议没有添加成功,估计很多人都会遇到这个问题,主要是“_o14”node实例句柄出错,换句话说,就是在修改ns-lib.tcl的时候出错了,之前有就MFlood协议添加就分析错误代码的文章,感觉博主写得很不错,其实也可以用gdb调试来寻找可能的问题原因~
// 5)
(_o14 cmd line 1)
invoked from within
"_o14 cmd addr"
invoked from within
"catch "$self cmd $args" ret"
invoked from within
"if [catch "$self cmd $args" ret] {
set cls [$self info class]
//问题出在这里,么有相应的addr的处理代码,但实际上添加路由协议以后不应该跳转到default的case,问题出在哪里,需要进一步分析。
//仔细分析之后,发现调用的ns命令一直没有实际执行编译后的ns
// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ which ns
// /home/jerry/ns-allinone-2.31/bin/ns //显示的目录
// 解决办法:重新建立ns的软链接,即
// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ mv ns ns.bak
// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ ln -s ../ns-2.31/ns .
// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ ls -l ns //再次查看ns链接情况
// lrwxrwxrwx 1 jerry jerry 13 2011-09-23 13:26 ns -> ../ns-2.31/ns
global errorInfo
set savedInfo $errorInfo
error "error when calling class $cls: $args" $..."
(procedure "_o14" line 2)
(SplitObject unknown line 2)
// 5)分裂对象未知,调用该类时找不到
invoked from within
// 4)
"_o14 addr"
("eval" body line 1)
invoked from within
"eval $node addr $args"
("default" arm line 2)
// 4)提示问题处在default这个case的第一行,实例句柄为_o14 addr调用出错
invoked from within
// 3)
"switch -exact $routingAgent_ {
DSDV {
set ragent [$self create-dsdv-agent $node]
}
DSR {
$self at 0.0 "$node start-dsr"
}
AODV {
set ragent [$self cre..."
(procedure "_o3" line 12)
(Simulator create-wireless-node line 12)
// 3)指明_o3出现错误的调用语句,在Simulator instproc create-wireless-node args函数体switch体的第12行
//12 "eval $node addr $args"
invoked from within
// 2)
"_o3 create-wireless-node"
("eval" body line 1)
invoked from within
"eval $self create-wireless-node $args"
(procedure "_o3" line 23)
(Simulator node line 23)
// 2)提示在ns-2.31/tcl/lib/ns-lib.tcl文件中的Simulator instproc node args(Simulator node)的23行代码,即为
//23 set node [eval $self create-wireless-node $args] #$self = = "-o3"
//使用eval 是从tcl脚本调用Otcl对象及函数 就是"_o3 create-wireless-node"
invoked from within
// 1)
"$ns_ node"
("for" body line 2)
invoked from within
set node_($i) [$ns_ node]
$node_($i) random-motion 0 ;# disable random motion
}"
(file "simple.tcl" line 63)
// 1)这一段提示问题出在tcl脚本文件的第63行,出错在"$ns_ node",即"$ns_ node"来自该for循环的
http://hi.baidu.com/jerry_916/blog/item/53651810f7c3ca0bb8127b4e.html