原文地址:http://blog.myspace.cn/e/400266384.htm
其實,這個問題已經出現很長時間了,但是直到昨天問題才得到解決。
問題描述
用NS2運行無線模擬,然後運行動畫程式nam,但是運行過程中出現“node x is not defined"這樣的問題。開始還以為是不是nam出現了問題,經過幾步找錯和查錯,調試終於找到了問題的根源。
問題解決步驟
首先運行ns xxx.tcl,得到模擬的nam動畫資料檔案,我們假設為:test.nam。
然後用nam運行該資料檔案,運行過程中出現節點未定義的錯誤,懷疑是nam程式的問題,決定對nam進行調試。
進入到nam的安裝資料夾,修改Makefile,在選項中添加調試選項。CCOPT = -g -Wall
重新編譯產生nam:make clean; make; make install
開始使用GDB進行調試:gdb nam
進入GDB之後輸入命令:set args test.nam
然後在檔案netmodel.cc的 NetModel::lookupNode()函數處設定斷點:b netmodel.cc:1570。
然後開始運行程式,輸入r然後斷行符號;
運行到斷點處,程式停止運行。此時就可以尋找出錯的原因了,輸入命令p nodes_(存放節點鏈表的頭指標),發現其值為空白(= 0x0);於是斷定問題的根源是在nam檔案中存放節點的鏈表是空的,進而推知,問題處在test.nam檔案而不是nam可執行檔。
開啟nam檔案查看,問題果然在此,因為在nam資料檔案中並沒有發現節點定義的語句(以n開頭的語句)。
開始尋找問題出現的原因,分析了一個成功啟動並執行例子,得知無線節點必須使用setdest命令之後才會寫到nam資料檔案中(到現在原因還沒有查明,期待您的評論)。
於是在模擬指令檔中添加setdest命令,然後運行模擬,問題排除。
需要注意的一個問題是,在nam檔案中節點在發資料之前必須已經存在,如果不存在就有會出錯,