《OPNET Modeler网络建模与仿真 教学课件 ppt 作者 李馨 第6-10章 第9章》由会员分享,可在线阅读,更多相关《OPNET Modeler网络建模与仿真 教学课件 ppt 作者 李馨 第6-10章 第9章(74页珍藏版)》请在金锄头文库上搜索。
1、第9章 OPNET 的调试,9.1 OPNET日志文件 9.2 OPNET仿真调试器(ODB) 9.3 OPNET与VC联合调试 9.4 OPNET调试应用举例,知识点: OPNET日志文件 OPNET仿真调试器(ODB) OPNET与VC联合调试 OPNET调试应用举例 本章导读: 在运行OPNET仿真时,不可避免地会出现错误。OPNET提供了ODB仿真调试器对错误进行定位以便调试和解决问题。此外,通过与VC联调,OPNET提供了更加强大的错误调试功能。,9.1 OPNET日志文件 仿真结束后,OPNET将产生一个包含错误和重要仿真事件的日志。DES日志将被写入以Tab定位分割的ASCII文
2、件中。OPNET提供了一个日志浏览器,这样可以更加方便地在DES日志里查看所需要的事件。 仿真运行完后,在工作区的右键弹出菜单或DES菜单中选择Open DES Log,将出现当前场景的Log Browser对话框,如图9-1所示。,图9-1 DES日志对话框,单击图9-1左边树形图中的某项,在右边即显示该项的日志事件。左下角的复选项可用于选择显示信息的种类。DES日志共有七个域,如表9-1所示。 单击日志信息中的Message项,将会打开一个编辑器,显示消息的全部信息,如图9-2所示。 此外,通过Help菜单中的Error Log操作,可以打开或清除仿真产生的错误日志。,表9-1 DES日志
3、域,图9-2 日志信息中消息的全部信息,9.2 OPNET仿真调试器(ODB) OPNET仿真调试器(ODB)是OPNET仿真内核中的一部分,自动与每个仿真进行连接。采用ODB与使用UNIX的符号语言调试器(如dbx和gdb)一样,都是为了提供分析程序执行的环境,并在运行时提供高级提取,如变量名、数据结构等的监控和维护。在OPNET上下文中,被分析的程序就是仿真,而高级提取包括了对象(如模块、子模块等)和动态数据实体(如包、事件等)。 当采用ODB与外部模拟器的调试环境进行交互仿真时,绝大多数的ODB命令都可在外部仿真环境中使用,而在ODB中也可使用其他环境的命令。,ODB的接口是基于文本的命
4、令解释程序,它通过标准的输入/输出与用户进行通信,因此允许来自ASCII终端或终端仿真窗口的访问。命令解释程序接受简单的控制仿真和信息打印命令。大多数命令都带了参数,以提供不同的选项。 使用ODB提供的命令,用户可进行如下操作: 执行单一事件。 为特定事件、时间、模块或进程设置断点,并在断点之间继续执行操作。 跟踪正在执行的核心函数,并限制对被选模块、进程、包或包群的跟踪。, 激活调用进程模型中特殊核心函数定义的断点或跟踪。 打印当前仿真实体的状态信息,包括静态模型对象(如模块)和动态实体(如事件、包和进程)。 打印反映内存使用情况的统计量和内存分配/释放的详细报告。 通过修改对象属性来影响仿
5、真的执行。,9.2.1 调用ODB 在OPNET中调用ODB通常有两种方法,其中一种是在OPNET Console中通过命令的行方式调用,如图9-3所示。 如果用户在OPNET的图形界面下运行仿真,那么可以通过在Configure/Run DES对话框的Advanced: Sim Execution中选中Use OPNET Debugger(ODB)来调用调试器,这是在OPNET中调用ODB的另一种方式,如图9-4所示。 进入ODB后,若在“odb”提示符下键入“help”命令,则可以获取ODB中的命令帮助,如图9-5所示。,图9-3 在命令行模式下调用ODB,图9-4 在图形界面下调用ODB
6、,图9-5 获取ODB帮助,退出ODB也有两种命令:一种是在“odb”提示符下键入“exit”,这样将立即退出仿真,不产生任何输出文件;另外一种是在“odb”提示符下键入“quit”,这时退出仿真并创建相应的输出文件。,9.2.2 ODB中的基本概念 ODB中许多重要的基本概念构成了绝大多数ODB命令的基础。这些概念在大多数符号调试工具中都很常见,使用过类似工具的读者应该比较熟悉。下面分别介绍断点(Breakpoint)、跟踪(Trace)、映射(Map)、诊断块(Diagnostic Block)和内存加标(Memory Tagging)五个基本概念,并列举一些基于这些概念的常用ODB命令。
7、,1. 断点 当调用ODB时,将其作为一个“值”来控制仿真中事件的执行。ODB可以处于打开或关闭状态。当处于打开状态时,ODB按序执行事件,并准备向仿真对象发送中断;当处于关闭状态时,ODB中断事件仿真,等待用户命令并处理它所收到的命令。关闭状态是由仿真的断点引起的,ODB的一个基本功能就是根据一系列未决的断点,在适当的时刻中断仿真。 当首次进入ODB解释器时,仿真到达断点,事件执行被中断,ODB等待命令输入。此时的仿真时间为0.0,事件列表中包含了所有模块的初始begsim事件。初始断点允许仿真在开始执行事件前输入ODB命令。,当在断点处引发中断时,ODB将打印一个标语来说明下一个未决事件,
8、这样用户就可以根据情况来决定是否需要对事件进行进一步的观察。事件标语的格式如图9-6所示。 只要出现ODB提示,就可以设置断点。注意在ODB命令中,并不采用术语“breakpoint”,而使用其同义词“stop”。例如,为特定事件设置断点的命令为evstop。ODB提供了多种命令来设置断点,断点捕获可基于特定事件、时间、进程、模块或模块与中断类型相结合。基本的断点设置命令如表9-2所示。,图9-6 ODB事件标语格式,表9-2 基本断点设置命令,除了以上描述的基本断点外,还有一类断点可支持基于进程的有条件捕获,叫做加标断点,它使得通过一个单一的断点就可以直接准确地捕获复杂条件。ODB采用带标签
9、参数的命令来设置加标断点。当进程调用函数op_prg_odb_bkpt()时,若其标签与ODB中设置的未决断点匹配,就捕获该加标断点。因此,加标断点的捕获条件是由进程行为和ODB命令共同定义的。表9-3列举了加标断点的相关命令。,表9-3 加标断点的设置命令,采用以上命令就可设置断点并将其加入到ODB维护的一个未决断点列表中,ODB根据断点列表来决定何时中断仿真。通过命令status可以显示未决的断点、跟踪和行为,如图9-7所示。 断点可以是活动的,也可以是挂起的。当活动断点与当前条件关联起来时,就中断仿真。而挂起断点只是临时停止活动,因此即使它与当前条件关联起来也不会中断仿真。只需要通过激活
10、/挂起断点,不必创建就可以开启/关闭断点。在触发断点前后可将其从列表中删除。用tstop设置的断点一旦被触发,将自动从断点列表中将其删除。ODB还提供了一些命令来激活、挂起和删除断点,如表9-4所示。,图9-7 status命令显示断点列表,表9-4 修改断点的命令,2. 跟踪 所谓跟踪,就是进程为响应事件或其他调用而调用的一系列核心函数。跟踪主要用于在动态仿真上下文中观察进程逻辑的执行情况,测量进程执行的进展,验证参数并返回被调用函数的值。图9-8所示是调用一个核心函数的跟踪信息的格式。 对于所有的核心函数,ODB跟踪输出的产生都可以被激活或去激活。当只在特定情况下执行核心函数时才激活跟踪,
11、可以避免大量无用的跟踪信息。与断点一样,只要出现ODB提示就可设置新的跟踪。ODB提供了许多命令用于基于特定模块、进程、包或包树的跟踪设置。基本的跟踪设置命令如表9-5所示。,图9-8 ODB核心函数调用跟踪格式,表9-5 基本的跟踪设置命令,与断点类似,ODB同样也提供了加标的跟踪设置命令(ltrace、mlstop、proltrace)和跟踪修改命令(acttrace、deltrace、susptrace),同样也可以通过status命令来查看未决的跟踪。由于与断点类似,这里不再一一叙述。,3. 映射 ODB中的映射就是一列根据ODB映射命令中的选择标准来收集的仿真实体。映射表提供了每个被
12、选实体的信息,如ID、拓扑位置。常用的选择标准有两个:选择特定实体和选择特定类型的所有实体。图9-9所示就是一个映射命令的输出。 映射可用于确定实体ID,并提供给其他ODB命令使用。动态实体(如包和进程)的映射可以方便地查看仿真状态。表9-6列出了ODB的映射命令。,图9-9 映射命令输出,表9-6 映 射 命 令,4. 诊断块 进程模型中包含了一个叫做“诊断块”的组件,进程编辑器提供了相应操作来编辑该诊断块的内容。诊断块由一系列只在ODB命令控制下执行的C语句组成。诊断块语句的典型应用就是显示快速估计的相关进程信息,或执行与进程资源相互影响的操作。 在任意断点处执行诊断块在一定程度上增加了O
13、DB的灵活性。例如为进程设置断点,在适当的地方中断仿真,然后就可调用另一进程的诊断块来检查只针对该断点的语句变量的值。有两种方法可用于调用诊断块,如表9-7所示。,表9-7 诊 断 块 命 令,5. 内存加标 内核根据内存的分配者,在创建时为所分配的内存加标。内存加标主要用于跟踪内存泄漏。当包的所属者发生改变时,仿真内核就在分配内存时为所有包的内存进行加标,由此可知包在何处创建以及包最后的所有者是谁。ODB采用表9-8列出的命令来进行内存加标。,表9-8 内存加标命令,9.2.3 ODB的命令集 ODB解释器接受来自标准输入设备和标准输出设备上打印的输出信息的命令。每条ODB命令占据一行,命令
14、结束需键入回车。命令由一个表示命令的单词和一系列参数组成。ODB的常用命令包括:!、actaction、atcstop、acttrace、alias、attrget、attrprint、attrset、cont、delaction、delstop、deltrace、encaptrace、evaction、evprint、evstop、exectrace、exit、fulltrace、help、history、iciprint_ev、iciprint_pk、interfaceset、interfacestop、interfacetrace、intstop、Imap、Istop、Itrace、me
15、msnk、memsrc、memstats、mlstop、mltrace、mstop、mtagfilter、mtagflush、mtagoff、mtagon、,mtagprint、mtrace、next、objassoc、objid、objmap、objpkmap、objprint、pkmap、pkprint、pkstop、pktimemap、pktrace、prodiag、proldiag、prolstop、proltrace、promap、prostop、protrace、ptmap、pttrace、quit、script_play、script_save、script_start、scri
16、pt_view、setvar、suspaction、suspstop、susptrace、tracefmt、tstop、unalias、unsetvar、where。 1. 常用参数 一般情况下,ODB命令都有一个或多个参数。表9-9总结了常用的ODB参数类型、使用该参数的命令以及可作为参数值源的命令。,表9-9 ODB常用命令参数,2. 命令别名 为了简化调试,可以为常用命令创建别名。当进行命令处理时,ODB将命令的首个单词与别名表中的别名进行匹配,如果匹配成功,别名就被它实际所代表的命令取代。图9-10给出了定义别名和取消别名的例子。 3. 命令变量 命令变量和别名很相似,但它可用在命令的任何部分。变量包括变量名和变量值。当变量名出现在命令中时,ODB将它替换为所对应的值。图9-11给出了定义变量和取消变量的例子。,图9-10 定义别名和取消别名,图9-11 定义变量和取消变量,在命令中引用变量的语法为(如图