添加路由協議出錯問題

 

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

"for {set i 0} {$i < $val(nn) } {incr i} {

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章