ns3中调试程序------命令行、gdb和logging系统
1、在調試代碼時候,一直沒有弄明白NS_LOG中的各種函數是如何使用的,甚至現在運行程序只知道,./waf –run,至于輸出調試信息,現在真的是沒有弄明白,不利于代碼的理解和調試。
2、通過命令行,改變實驗變量,觀察實驗結果
./waf --run "sb" --command-template="%s --help"
會出現程序參數和一般參數
比如修改distance(default=50),
,會明顯實驗結果在distance=200時,收發數據包為0,distance距離導致收發雙方不能正常通信。
這種通過命令行的方法,只會改變一次運行結果,不會改變文件中的值,下次運行時,distance仍然=50,對于觀察實驗結果來說,很方便,尤其是把每次改變結果值,寫成腳本,運行很方便
3、gdb調試,個人認為比較笨拙,不過在eclipse沒安裝成功,這也是一個小調試的方法。
,進入到gdb調試環境中,l,break,r,finish,next,進行調試。
4、NS3中的logging系統,功能也很強大,只是現在使用很少,記錄各模塊中的輸出信息,對調試的執行有幫助。
在程序中”wifi-example-sim.cc”發現,使用了”NS_LOG_COMPONENT_DEFINE”和”NS_LOG_INFO”以及”NS_LOG_ERROR”這3種形式的函數;
比如,我想在運行程序”wifi-example-sim.cc”時,輸出NS_LOG_INFO函數中的信息,首先找到NS_LOG_COMPONENT_DEFINE("WiFiDistanceExperiment"),之后通過命令行
觀察程序運行情況;
因為該程序,”NS_LOG_ERROR”未執行到,所以,沒有信息輸出。
5、
可以看到”wifi-example-sim.cc”和”wifi-example-apps.cc”中的NS_LOG信息,便于理解程序運行。
分析程序,從main函數運行,“Create traffic source & sink”之后,創建對象,調用WiFiDistanceApps::Sender和WiFiDistanceApps::Receiver(使用了NS_LOG_FUNCTION_NOARGS,輸出函數的名字,這應該只在靜態函數中使用;大多數成員函數應該使用NS_LOG_FUNCTION()),之后開始Simulator::Run()
6、如果顯示函數前綴,
export 'NS_LOG=WiFiDistanceExperiment=all|prefix_func|prefix_time:WiFiDistanceApps=all|prefix_func|prefix_time' ./waf --run "sb"
可以得到很詳細的函數調用,以及函數調用的時間,有時候也是一種負擔,因為太詳細,終端不容易觀察,可以輸出到文本文件中查看$ ./waf --run "sb" >&sb.txt可以通過$ gedit sb.txt查看輸出信息。
7、為了方便,經常定義
8、同樣也可以定義:
bool tracing=false;//turn on ascii and pcap tracing; if(tracing == true) { AsciiTraceHelper ascii; YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default(); wifiPhy.EnableAsciiAll(ascii.CreateFileStream("wifi-simple-adhoc-grid.tr")); wifiPhy.EnablePcap("wifi-simple-adhoc-grid",devices); NetdeviceContainer devices = wifi.Install(wifiPhy,wifiMac,c); } export NS_LOG=UdpEchoClientApplication=level_all export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:UdpEchoServerApplication=level_all|prefix_func' export 'NS_LOG=*=level_all|prefix_func|prefix_time' unset NS_LOG//關閉所有的NS-LOG?
總結
以上是生活随笔為你收集整理的ns3中调试程序------命令行、gdb和logging系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产品备案编号怎么查询(产品备案编号)
- 下一篇: DDos攻击防范基本思路(ddos攻击防