缺省情况下,在对覆盖目录运行 uncover 命令时,会在 Oracle Developer Studio 性能分析器中以实验的形式打开覆盖报告。本节介绍显示覆盖数据的性能分析器界面。
有关性能分析器的更多信息,请参见集成帮助和Oracle Developer Studio 12.5:性能分析器。
在性能分析器中打开覆盖报告时,将显示 "Overview"(概述)屏幕。此视图显示您正在运行的实验、实验的度量以及度量预览。
下图显示了性能分析器中的 "Overview"(概述)屏幕。
在导航面板中,单击 "Functions"(函数)视图可显示程序的函数和专用度量。要按照特定度量的值对数据进行排序,请单击所需的列标题。单击列标题下的箭头可以反转排序顺序。
这些度量包括以下各项:
未覆盖计数器,指示可为该函数覆盖的字节数。
函数计数器,指示被覆盖的函数。
指令执行计数器,指示是否在函数中执行了某个指令。
块覆盖率计数器,指示在函数中覆盖的块所占的百分比。
指令覆盖率计数器,指示在函数中覆盖的指令所占的百分比。
下图显示了性能分析器中的一个覆盖报告,按 "Uncoverage"(未覆盖)排序。
"Uncoverage"(未覆盖)计数器是一项极其强大的 uncover 功能。如果使用此列作为排序键,则在降序排列时,显示在最上面的函数是最有可能提高覆盖率的函数。在上图中,test_for_memory_leak() 函数位于列表的顶端,因为它在 "Uncoverage"(未覆盖)列中的数值最大。
test_for_memory_leak()函数的 "Uncoverage"(未覆盖)数值是指,在向套件中添加一个测试以调用该函数时可能覆盖的代码字节数。根据函数的结构,覆盖率实际增加的量会有所不同。如果该函数没有分支,并且它调用的所有函数也是直线型函数,则覆盖将增加指定的字节数。但是,覆盖增长通常会小于潜在值,也许会小很多。
"Uncoverage"(未覆盖)列中使用非零值的未覆盖函数称为根未覆盖函数,表示它们都由覆盖函数调用。仅由非根未覆盖函数调用的函数没有自己的 "Uncoverage"(未覆盖)数值。可以推定,在后续运行中,随着测试套件的改进而覆盖了潜力较大的未覆盖函数,这些函数将成为覆盖或未覆盖函数。
覆盖数目是非独占性的。
"Function Count"(函数计数)列报告已覆盖的函数和未覆盖的函数。如果计数为零,表示该函数未覆盖。如果计数非零,表示该函数已覆盖。如果执行了函数中的任一指令,该函数将视为已覆盖。
可以检测到此列中的非顶层未覆盖函数。如果 "Function Count"(函数计数)和 "Uncoverage"(未覆盖)列均为零,则表示该函数不是顶层覆盖函数。
"Instr Exec"(指令执行)计数器显示已覆盖的指令和未覆盖的指令。零计数表示未执行指令,非零计数表示已执行指令。
在 "Functions"(函数)视图中,该计数器会显示为每个函数执行的指令总数。此计数器还出现在 "Source"(源)视图和 "Disassembly"(反汇编)视图中。
对于每个函数,"Block Covered %"(块覆盖率)计数器显示该函数中被覆盖的基本块的百分比。此数值指示函数被覆盖的程度。请忽略 "Total"(总计)行中的此条目,它是列中百分比之和,没有意义。
对于每个函数,"Instr Covered %"(指令覆盖率)计数器显示该函数中被覆盖的指令的百分比。此数值指示函数被覆盖的程度。请忽略 "Total"(总计)行中的此条目,它是列中百分比之和,没有意义。
如果二进制文件是使用 –g 选项编译的,"Source"(源)视图将显示程序的源代码。由于 uncover 在二进制文件级别上检测您的程序,并且已使用优化设置编译程序,因此,此视图中的覆盖信息很难解释。
"Source"(源)视图中的 "Instr Exec"(指令执行)计数器显示了为每个源代码行执行的总指令数,它本质上是语句级别的代码覆盖信息。非零值表示该语句已覆盖;零值表示该语句未覆盖。变量声明和注释没有指令执行计数。
下图显示了打开的 "Source"(源)视图的一个示例。
对于没有与其关联的任何覆盖信息的源代码行,行是空白的,任何字段中都没有数值。出现这些空行的原因如下:
注释、空白行、声明和其他语言结构不包含可执行的代码。
由于以下某个原因,编译器优化删除了与这些行对应的代码:
代码从不执行(死代码)。
代码可以执行,但为冗余代码。
有关更多信息,请参见使用 uncover 时的限制。
如果在 "Source"(源)视图中选择一行,然后选择 "Disassembly"(反汇编)视图,性能分析器将在二进制文件中查找选定的行,并显示其反汇编。
此视图中的 "Instr Exec"(指令执行)计数器显示了每个指令的执行次数:
"Instruction Frequency"(指令频率)视图显示总体覆盖情况摘要: