添加路由協議後,經常會出現以下錯誤,其實還是協議沒有添加成功,估計很多人都會遇到這個問題,主要是“_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