ns3中调试程序------命令行、gdb和logging系统

1、在调试代码时候,一直没有弄明白NS_LOG中的各种函数是如何使用的,甚至现在运行程序只知道,./waf –run,至于输出调试信息,现在真的是没有弄明白,不利于代码的理解和调试。

2、通过命令行,改变实验变量,观察实验结果

./waf --run "sb" --command-template="%s --help"


会出现程序参数和一般参数
比如修改distance(default=50),

./waf --run "sb" --command-template="%s --distance=200"

,会明显实验结果在distance=200时,收发数据包为0,distance距离导致收发双方不能正常通信。
这种通过命令行的方法,只会改变一次运行结果,不会改变文件中的值,下次运行时,distance仍然=50,对于观察实验结果来说,很方便,尤其是把每次改变结果值,写成脚本,运行很方便
3、gdb调试,个人认为比较笨拙,不过在eclipse没安装成功,这也是一个小调试的方法。

./waf --run "sb" --command-template="gdb %s"


,进入到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"),之后通过命令行

export NS_LOG=WiFiDistanceExperiment=info
./waf --run "sb"


观察程序运行情况;
因为该程序,”NS_LOG_ERROR”未执行到,所以,没有信息输出。
5、

export NS_LOG=WiFiDistanceExperiment=all:WiFiDistanceApps=all
./waf --run "sb"


可以看到”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、为了方便,经常定义

bool verbose=false;
WifiHelper wifi;
if(verbose)
{
wifi.EnableLogComponents();
}//turn on all wifi logging

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1043 输出PATest(PAT乙级 C++)

题目 给定一个长度不超过 10​4的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest… 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍…

ModuleNotFoundError: No module named ‘apt_pkg‘

原因 升级到python3.6会导致python库的引用产生混乱 解决方法 先选择删除python-apt apt-get remove --purge python-apt 安装python-apt apt-get install -f -y python-apt 拷贝python3.5的apt-pkg*.so 名重名为python3.6的apt-pkg*.so cd /usr/lib/python3/dist-packag…

使用Selenium Webdriver进行全屏截图

在任何网页测试人员中,执行效果最好的操作之一就是对网页进行截图。 每当测试人员发现并报告错误时,如果不支持该问题的屏幕截图甚至视频,就不会认真对待该错误。 不论您进行的测试类型是什么,包括硒自动化测试,都是如…

子进程 已安装 post-installation 脚本 返回错误状态 1 dpkg: 依赖关系问题使得 mysql-server 的配置工作不能继续: mysql-server 依赖于 mysq

错误概述 有 2 个软件包没有被完全安装或卸载。 解压缩后会消耗 0 B 的额外空间。 您希望继续执行吗? [Y/n] y 正在设置 mysql-server-5.7 (5.7.24-0ubuntu0.16.04.1) ... mysql_upgrade: Got error: 2002: Cant connect to local MySQL server through socket /va…

1046 划拳 PAT乙级(C++)

题目 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一…

只读副本和Spring Data第4部分:配置只读存储库

以前,我们在同一应用程序中设置了两个EntityManager。 一种用于读取,另一种用于写入。 现在是时候创建我们的读取存储库了。 只读存储库将使用辅助只读EntityManager。 为了使其成为只读存储库,至关重要的是不要执行任何保存和持久操作。 p…

c++中 int, long long, double 等数据类型的长度及范围整理

先附上一个比较直观的表,长度表示字节: byte: 字节 bit: 位 1. 短整型short: 所占内存大小:2byte16bit; 所能表示范围:-32768~32767;(即-2^15~2^15-1) 2. 整型int: 所占内存大小:4…

1044 火星数字 PAT乙级 (C++)

题目 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret。地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, …

怎样编写测试类测试分支_编写干净的测试–从配置开始

怎样编写测试类测试分支很难为干净的代码找到一个好的定义,因为我们每个人都有自己的单词clean的定义。 但是,有一个似乎是通用的定义: 简洁的代码易于阅读。 这可能会让您感到有些惊讶,但我认为该定义也适用于测试代码。 使测试…

python 数据处理----读取txt 一列数据写入excel 文件

将txt数据从某一行开始写入excel文件中(例子为从Appthroughput写至excel_result1.xlsx中) import sys import random import time import xlwt import codecsdef Txt_to_Excel(wb,inputTxt,start_row,start_col):fr codecs.open(inputTxt,r)line_numbe…

CCF CSP 201403-1 相反数(C++)

题目 问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。   第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 输出…

硒等待:内隐,外显,流利和睡眠

Selenium等待页面加载在Selenium脚本中起着重要的作用。 它们有助于使它们不易剥落,更可靠。 Selenium提供多次等待,以根据某些条件在脚本执行中提供足够的等待或暂停。 从而确保您在使用Selenium执行自动化测试时不会导致脚本失败。 在本教程中&#xf…

python多个变量的for循环

当for循环有两个需要迭代的对象时,要用zip对这多个变量封装,否则会报错“too many values to unpack” 错误的例子: starts [0,1,2,3,4]ends [5,6,7,8,9]for start, end in starts, ends:print((start, end)) 正确的例子: sta…

1040 有几个PAT(PAT乙级 C++)

题目 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。 现给定字符串,问一…

在win10+Ubuntu双系统下,完美卸载Ubuntu

本文为转载博客,亲测有效 背景 机器:惠普 暗影精灵3 win10与Ubuntu16.04均为UEFI分区 清除ubuntu系统 使用软件:diskgenius   删除Ubuntu系统使用的几个分区(包括EFI分区),注意不要删除Windows的EFI分…

1048 数字加密(PAT乙级 C++)

题目 本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12&…

在浏览器中在线尝试无服务器框架项目!

无服务器框架是无服务器工具的一致领导者。 但是,没有简单的方法可以在线试用无服务器框架项目。 您确实需要一个体面的开发人员设置,并且需要一些工作来设置sls , npm等。 确切地说,您做到了 –直到现在。 无服务器项目–在您的…

Dev C++源代码未编译

从DevC官网下载的编译器,结果编译程序没问题,但是运行程序时显示源文件未编译。 尝试很多方法。(官网下载不一定最佳)最后通过在其他网站下载重装DevC问题得以解决。 后一个DevC下载网址: https://pc.qq.com/detail/1…

1051 复数乘法(PAT乙级 C++)

题目 复数可以写成 (ABi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i​2​​ −1;也可以写成极坐标下的指数形式 (Re​(Pi)),其中 R 是复数模,P 是辐角,i 是虚数单位&…

java se/ee_嗨,您好 。 。 ! 您如何评价Java / Java EE技能?

java se/ee要知道,就是要知道你一无所知。 那就是真正知识的含义。 苏格拉底 这篇文章旨在为读者提供Java生态系统及其技术堆栈的快速概述。 老实说,从Java EE 7,Java SE 8到Java Embedded 8…,Java平台进行了许多革命性的更改…