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