(转)ns2输出调试信息及trace

本文介绍了使用NS2进行协议仿真时的两种调试方法:fprintf和sprintf。详细解释了它们的功能及应用场景,并提供了如何有效利用这些工具来记录调试信息的具体示例。
部署运行你感兴趣的模型镜像

在使用NS2进行协议仿真的过程中,对于调试信息的输出通常采取三两种方式,一种是使用fprintf,另一种是sprintf。

1、 fprintf

       将格式化数据写入流式文件中

       fprintf(stderr, "%s: got my own REQUEST\n", __FUNCTION__);   //其中stderr是标准错误输出,这里会输出到控制台上

2、sprintf

       2.1 输出到字符串中

       sprintf(logtarget_->pt_->buffer(), "THIS IS A TEST!!!");
       logtarget_->pt_->dump();

       //这里的THIS IS A TEST就是要输出的内容,实际上这里是采用字符串流的方式将文本输出到了.tr文件中

2.2 输出到tcl

char out[100]; 
// Prepare the output to the Tcl interpreter. Calculate the round
// trip time 
sprintf(out, "%s recv %d %3.1f", name(), 
hdrip->src_.addr_ >> Address::instance().NodeShift_[1],
(Scheduler::instance().clock()-hdr->send_time) * 1000);
Tcl& tcl = Tcl::instance(); 
tcl.eval(out);

 

#in tcl scripts, for example Agent/Ping protocol

Agent/Ping instproc recv {from rtt} {
$self instvar node_
puts "node [$node_ id] received ping answer from \
$from with round-trip-time $rtt ms."
}




Trace文件的写入需要包的发送和接收触发,但是也可在程序 中控件它的发生。这时我们需要一个Trace*变量:

Trace* logtarget_; 

对这个变量的初始化,可以在command函数中。

logtarget_ = (Trace*)TclObject::lookup(argv[2]);

 这样就可以通过logtarget_在任何时候,把要写入的信息写入到Trace文件 中去。如:

sprintf(logtarget_->pt_->buffer(),"hello world");
logtarget_
->pt_->dump();    //写入缓存

 

Trace文件的写入技巧:

每向buffer()写入一次数据,就需要dump()一次。如果在dump()之前又执行了一次sprintf,那后一次会黑覆盖前一次的内容,即buffer的指针并不会自动移动。如果要实现指针移动,就要记住每次写入后的offset。

sprintf(logtarget_->pt_->buffer(),"hello world");
sprintf(logtarget_
->pt_->buffer(),"Hi");
logtarget_
->pt_->dump();
//只有"Hi","hello world"被覆盖了。



sprintf(logtarget_->pt_->buffer(),"hello world");
offset 
= strlen(logtarget->pt_->buffer());
sprintf(logtarget_
->pt_->buffer() + offset,"Hi");
logtarget_
->pt_->dump();

sprintf(logtarget_
->pt_->buffer(),"hello world");
logtarget_
->pt_->dump();
sprintf(logtarget_
->pt_->buffer(),"Hi");
logtarget_
->pt_->dump();

效果一样

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值