主要内容

TLC覆盖范围

使用TLC覆盖选项

这个例子使用TLC调试器使用调试器检测TLC文件的一个部分中的问题。因为测试模型可能不会覆盖所有可能的用例,所以有一种跟踪未测试用例的技术,TLC覆盖选项。

TLC Coverage选项提供了一种更简单的方法来确定代码中的不同代码部分(不是路径)。要指定TLC覆盖跟踪,请在“配置参数”对话框中,选择生成代码时启动TLC覆盖范围

启动TLC覆盖范围时,目标语言编译器会产生a.LOG.每个目标文件的文件(* .tlc.)使用。这些.LOG.文件放在为模型创建的项目文件夹中。每人.LOG.文件包含有关在执行期间遇到每行的每行的次数的用法(计数)信息。每行从遇到的次数开始,然后是冒号,然后是代码。

. log文件示例

以下是一个日志文件,它是为示例模型生成代码的日志文件sfcndemo_sdotproduct,位于文件夹中matlabroot/工具箱/ sim金宝appulink / simdemos / simfeatures开放)。此模型内向了Sdot产品在TLC中的S函数。实现S函数的TLC文件位于文件夹中matlabroot/工具箱/ sim金宝appulink / simdemos / simfeatures / tlc_c开放)。当.LOG.文件sdotproduct.tlc.sdotproduct.log.,它位于您的构建文件夹中。内容sdotproduct.log.类似于:

来源:E: \ matlab工具箱\ \仿真软件\ 金宝appsimdemos \ simfeatures \ tlc_c \ sdotproduct。tlc 0: %% 0: %%由sdotproduct生成TLC。ttlc revision 1.6 0: %% 0: %%摘要:0:%%点积块目标文件。1: 1: %implements sdotproduct "C" 1: 0: %% Function: FcnThriftedComplexMultiply ======================================== 0: %% Abstract: 0: %%该函数将复数平面上的两个数相乘。如果输入参数0:%%中的任何一个都是实数,那么复杂部分将以“”的形式传入0:%%。0: % % 1: %函数FcnThriftedComplexConjMultiply(基于“增大化现实”技术,人工智能,br, bi、铬、ci,凤凰社)无效2:% openfile缓冲0:% % 0:% %计算cr = ar * br + ai * bi 0: % % 2: %分配rhsStr =“% < ar > * % < br > " 2: %如果! LibIsEqual (ai , "") && ! ”“LibIsEqual (bi) 0: %分配rhsStr = rhsStr + " + % < ai > * % < bi > " 0: % endif 2: % < cr > % < op > % < rhsStr >;0: % % 0: % %计算Ci = Ar * Bi - Ai * Br 0: % % 2: %如果! LibIsEqual (Ci, " ") 0: %分配rhsStr = " 0.0 " 0: %如果! LibIsEqual (Bi, " ") 0: %分配rhsStr =“% < Ar > * % < Bi > " 0: % endif 0: %如果! LibIsEqual (" ") Ai 0: %分配rhsStr = rhsStr +”——% < Ai > * % < Br > " 0: % endif 0: % < Ci > % < op > % < rhsStr >;0: % endif 0: % % 2: % closefile缓冲2:%返回缓冲区0:% endfunction % % FcnThriftedComplexMultiply 1: 1: 0: % %功能:输出  =========================================================== 0: % %文摘:0:% % Y =情况* U1,情况是复杂的共轭转置情况0:% % 1:%函数输出(块,系统)输出1:%assign sfcnName =参数设置。FunctionName 1: / * % <类型>块(% < sfcnName >): % < LibParentMaskBlockName(块)> * / 0:% % 1:%分配u0re = LibBlockInputSignal (0 , "", "", "%< tRealPart > 0) 1: %分配u0im = LibBlockInputSignal (0 , "", "", "%< tImagPart > 0) 1: %分配u1re = LibBlockInputSignal (1 , "", "", "%< tRealPart > 0) 1:%分配u1im = LibBlockInputSignal (1 , "", "", "%< tImagPart > 0) 0: % % 1: %分配yre = LibBlockOutputSignal (0 , "", "", "%< tRealPart > 0) 1: %分配yim = LibBlockOutputSignal (0 , "", "", "%< tImagPart > 0) 0: % % 0: % %需要声明一个临时变量u1re当输出是0:% %覆盖和u0im是零1: %assign outputOverWritesInput = ... 0: ((LibBlockInputSignalBufferDstPort(0) == 0) || ... 0: (LibBlockInputSignalBufferDstPort(1) == 0)) && ... 0: (LibBlockInputSignalIsComplex(0) && LibBlockInputSignalIsComplex(1)) 0: %% 1: %if outputOverWritesInput 0: { 0: %assign dtName = LibBlockOutputSignalDataTypeName(0, tRealPart) 0: % tmpVar; 0: \ 0: %assign tmpVar = "tmpVar" 0: %else 1: %assign tmpVar = yre 0: %endif 0: %% 1: % = tmpVar; 0: %endif 0: %else 0: %% Continue with dot product for nonscalar case 1: %roll idx = rollRegion, lcv = RollThreshold, block, "Roller", rollVars 1: %assign u0re = LibBlockInputSignal(0,"",lcv,"%%") 1: %assign u0im = LibBlockInputSignal(0,"",lcv,"%%") 1: %assign u1re = LibBlockInputSignal(1,"",lcv,"%%") 1: %assign u1im = LibBlockInputSignal(1,"",lcv,"%%") 0: %% 1: %assign yre = LibBlockOutputSignal(0,"",lcv,"%%") 1: %assign yim = LibBlockOutputSignal(0,"",lcv,"%%") 0: %% 1: %
            

分析结果

这种结构使得可以轻松识别未拍摄的分支并开发可以锻炼目标文件未使用部分的新测试。

看着sdotproduct.log.文件,您可以看到代码尚未用于将默认值分配给参数(例如,函数代码的第一部分fcnthriftedcomplexconjmultiply)。使用此日志作为参考和创建锻炼未执行行的模型,可以确保您的代码更强大。

相关的话题