5 NS2編程出錯調(diào)試實(shí)例.doc_第1頁
5 NS2編程出錯調(diào)試實(shí)例.doc_第2頁
5 NS2編程出錯調(diào)試實(shí)例.doc_第3頁
5 NS2編程出錯調(diào)試實(shí)例.doc_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

NS2編程出錯調(diào)試實(shí)例1引言NS2缺乏比較好的調(diào)試工具,當(dāng)我們編寫的一個比較長的TCL腳本出錯時往往不知道問題出在哪里。在調(diào)試NS2程序時,我們更重要的是要有耐心,仔細(xì)分析出錯的原因。經(jīng)驗(yàn)往往會在這時起到很重要的作用。下面是我調(diào)試一個腳本的經(jīng)驗(yàn),希望能夠?qū)φ{(diào)試TCL腳本有所啟發(fā)。2調(diào)試實(shí)例程序依舊是上次試驗(yàn)的程序,即有四個節(jié)點(diǎn)進(jìn)行消息傳送。這次的目的是查看即時的C+參數(shù)值,測量FTP那條TCP Flow的congestion window變化。具體程序參考0/smallko/ns2/module.htm后面部分的范例二。下面是我的程序,以及出錯的地方。紅色的部分是我的調(diào)試經(jīng)驗(yàn)。#set a simulatorset ns new Simulator#針對不同的資料流設(shè)定不同的顏色,這是給NAM用的$ns color 1 Blue$ns color 2 Red#開啟一個NAM trace fileset nf open out.nam w$ns namtrace-all $nf#開啟一個檔案,用來記錄封包傳送的過程set nd open out.tr w$ns trace-all $nd#開啟一個檔案,用來記錄TCP Flow的congestion window變化情況set wnd_trace open cwnd.tr w#定義一個記錄的程序,每個0.1秒就去查看目前TCP Flow的值proc record global ns tcp wnd_trace set time 0.1 #讀取C+內(nèi)cwnd_的變量值 set curr_cwnd $tcp set cwnd_ set now $ns now puts $wnd_trace $now $curr_cwnd $ns at expr $now+$time record#定義一個結(jié)束的程序#這里把函數(shù)中第一行的wnd_trace寫成了wnd_race,運(yùn)行給出的出錯信息為#ns: finish: cant read wnd_trace問題出現(xiàn)在這里: no such variable# while executing#close $wnd_trace# (procedure finish line 6函數(shù)是按這個函數(shù)的內(nèi)部來排列行數(shù)的。)# invoked from within#finish#這說明問題出在finish這個函數(shù)proc finish procedure “finish” line 1 global ns nf nd wnd_race應(yīng)該為wnd_traceline 2 $ns flush-traceline 3 close $nfline 4 close $ndline 5 close $wnd_traceline 6 #以背景執(zhí)行的方法去執(zhí)行NAM exec nam out.nam & exit 0#產(chǎn)生四個節(jié)點(diǎn)set n0 $ns nodeset n1 $ns nodeset n2 $ns nodeset n3 $ns node#把節(jié)點(diǎn)連接起來$ns duplex-link $n0 $n2 2Mb 10ms DropTail$ns duplex-link $n1 $n2 2Mb 10ms DropTail$ns duplex-link $n2 $n3 1.7Mb 20ms DropTailset qn2n3_ $ns link $n2 $n3 queue#設(shè)定n2到n3之間的Queue Size為10個封包大小$ns queue-limit $n2 $n3 10#設(shè)定節(jié)點(diǎn)的位置,這是給NAM用的$ns duplex-link-op $n0 $n2 orient right-down$ns duplex-link-op $n1 $n2 orient right-up$ns duplex-link-op $n2 $n3 orient right#觀測n2到n3之間queue的變化,這是要給NAM用的$ns duplex-link-op $n2 $n3 queuePos 0.5#建立一條TCP連接set tcp new Agent/TCP$tcp set class_ 2$ns attach-agent $n0 $tcpset sink new Agent/TCPSink$ns attach-agent $n3 $sink$ns connect $tcp $sink#在NAM中,TCP的連線會以藍(lán)色表示$tcp set fid_ 1#在TCP連接之上建立FTP應(yīng)用程序set ftp new Application/FTP$ftp attach-agent $tcp$ftp set type_ FTP#建立一條UDP的連線set udp new Agent/UDP$ns attach-agent $n1 $udpset null new Agent/Null$ns attach-agent $n3 $null$ns connect $udp $null#在NAM中,UDP的連線會以紅色表示$udp set fid_ 2#在UDP連線之上建立CBR應(yīng)用程序set cbr new Application/Traffic/CBR$cbr attach-agent $udp$cbr set type_ CBR$cbr set packet_size_ 1000$cbr set rate_ 1mb$cbr set random_ false#設(shè)定FTP和CBR資料傳送開始和結(jié)束時間$ns at 0.1 $cbr start$ns at 1.0 $ftp start$ns at 1.1 record$ns at 4.0 $ftp stop$ns at 4.5 $cbr stop#結(jié)束TCP的連線(不一定需要下面的代碼)#把后面的$ns detach-agent $n3 $sink寫成了$ns detach-agent $ns $sink#以至于在程序運(yùn)行時出現(xiàn)錯誤,查看out.nam可以發(fā)現(xiàn)程序在4.49870588235294時出錯這說明這個腳本在這個時間點(diǎn)之前都是正確運(yùn)行的,這個腳本是在運(yùn)行中出現(xiàn)了錯誤。那么與這個時間點(diǎn)很近的地方可能就是問題出現(xiàn)的地方。腳本中哪里與時間有關(guān)呢?一個是開始運(yùn)行時,一個就是結(jié)束運(yùn)行時。#下次遇見這個問題要從文件的執(zhí)行去查找錯誤#在出錯輸出中,有$node detach $agent $nullAgent_這個提示,這時就在這里找原因#查找這種問題時要按照程序的執(zhí)行順序來找原因#腳本從第一行按順序開始執(zhí)行前面的腳本都是對NS模擬環(huán)境的配置,環(huán)境配置好后,最后一行的代碼才是運(yùn)行這個模擬。,先不會執(zhí)行proc函數(shù),到調(diào)用時執(zhí)行函數(shù)#運(yùn)行時的出錯消息為#ns: _o3 detach-agent _o10 _o82 ; _o3 detach-agent _o3 _o84:# (_o3 cmd line 1)# invoked from within#_o3 cmd detach _o84 _o6# invoked from within#catch $self cmd $args ret# invoked from within#if catch $self cmd $args ret #set cls $self info class#global errorInfo#set savedInfo $errorInfo#error error when calling class $cls: $args $.# (procedure _o3 line 2)# (SplitObject unknown line 2)# invoked from within#$node detach $agent $nullAgent_從這個出錯信息中可以知道,錯誤出在detach的地方,還有agent與nullAgent的出現(xiàn)。就在腳本中找這些地方看哪里出錯了吧。# (procedure _o3 line 20)# (Simulator detach-agent line 20)# invoked from within#_o3 detach-agent _o3 _o84#仔細(xì)讀出錯提示,耐心找問題出在哪里。$ns at 4.5 $ns detach-agent $n0 $tcp ; $ns detach-agent $ns這里誤把$n3寫成了$ns。這個錯誤太難找了。以往出錯時都會給出在TCL腳本的那一行出了錯誤,這里卻沒有說明。以至于我總想找一個調(diào)試工具可以把這個腳本什么地方出錯找出來,浪費(fèi)了大量時間。而且在這么長的腳本中,用UltraEdit編輯器根本沒有語法提示,任何地方都可能出錯,找到這個錯誤我的第一想法就是對照標(biāo)準(zhǔn)程序一行一行看哪里出了問題。找出問題才會積累經(jīng)驗(yàn)。 $sink#在模擬環(huán)境中,5秒后去調(diào)用finish函數(shù)來結(jié)束模擬#在模擬環(huán)境中的5秒并不一定等于實(shí)際模擬的時間$ns at 5.0 finish#執(zhí)行模擬$ns run3總結(jié)目前還沒有找到好的調(diào)試工具以及代碼編輯工具。所以只好用NS2自帶的調(diào)試信息仔細(xì)尋找。有一定經(jīng)驗(yàn)之后就會比較熟悉了。NS2調(diào)試

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論