Oracle Solaris Studio 12.2 Discover 和 Uncover 用户指南

了解性能分析器中的覆盖率报告

缺省情况下,在对覆盖率目录运行 uncover 命令时,会在 Oracle Solaris Studio 性能分析器中以实验的形式打开覆盖率报告。分析器使用 "Functions"(函数)、"Source"(源代码)、"Disassembly"(反汇编)和 "Inst-Freq"(指令频率)选项卡来显示覆盖率数据。

"Functions"(函数)选项卡

在分析器中打开覆盖率报告时,"Functions"(函数)选项卡处于选中状态。该选项卡显示了一些列,其中列出了每个函数的 "Uncoverage"(未覆盖率)、"Function Count"(函数计数)、"Instr Exec"(指令执行)、"Block Covered %"(块覆盖率)和 "Instr Covered %"(指令覆盖率)计数器。单击任何一列的标题可以将该列设置为数据的排序键。单击列标题上的箭头可以反转排序顺序。

性能分析器的 Uncover 报告的 "Functions"(函数)选项卡

"Uncoverage"(未覆盖率)计数器

"Uncoverage"(未覆盖率)度量是一项极其强大的 Uncover 功能。如果使用此列作为排序键,降序排列时,显示在最上面的函数是最有可能提高覆盖率的函数。在本例中,main() 函数位于列表的顶端,因为它在 "Uncoverage"(未覆盖率)列中的数目最多。(sigprof()sigprofh() 函数的数目相同,因此它们按字母顺序排列。)

main() 函数的未覆盖率数目是指,向导致调用该函数的套件添加一个测试时可能覆盖的代码的字节数。根据函数的结构,覆盖率实际增加的量会有所不同。如果该函数没有分支,并且它调用的所有函数也是直线型函数,则覆盖率确实只会增加指定的字节数。但一般而言,覆盖率增长会小于潜在值,也许会小很多。

"Uncoverage"(未覆盖率)列中使用非零值的未覆盖函数称为根未覆盖函数,表示它们都由覆盖函数调用。仅由非根未覆盖函数调用的函数没有自己的未覆盖率数目。假定在后续的运行中,随着测试套件的改善而覆盖了潜力较大的未覆盖函数,这些函数将被覆盖,或者揭开以成为未覆盖函数。

覆盖率数目是非排他性的。

"Function Count"(函数计数)计数器

函数计数是某个函数被调用的次数,但在覆盖率分析上下文中,实际计数无关紧要。关键在于计数是零还是非零。如果计数为零,表示该函数未覆盖。如果计数非零,表示该函数已覆盖。如果执行了函数中的任一指令,该函数将视为已覆盖。

可以检测到此列中的非顶层未覆盖函数。如果某个函数的函数计数是零,并且未覆盖率数目也是零,表示该函数不是顶层覆盖函数。

"Instr Exec"(指令执行)计数器

"Instr Exec"(指令执行)计数器显示动态指令计数。"Functions"(函数)选项卡中显示了为每个函数执行的指令总数。此计数器还出现在 "Source"(源代码)选项卡(请参见"Source"(源代码)选项卡)和 "Disassembly"(反汇编)选项卡(请参见"Disassembly"(反汇编)选项卡)中。

"Block Covered %"(块覆盖率)计数器

对于每个函数,"Block Covered %"(块覆盖率)计数器显示该函数中被覆盖的基本块的百分比。通过此数目可以大致了解函数的覆盖情况。请忽略 <Total> 行中的这个数字,它是列中的百分比之和,没有意义。

"Instr Covered %"(指令覆盖率)计数器

对于每个函数,"Instr Covered %"(指令覆盖率)计数器显示该函数中被覆盖的指令的百分比。通过此数目也可以大致了解函数覆盖的情况。请忽略 <Total> 行中的这个数字,它是列中百分比之和,没有意义。

"Source"(源代码)选项卡

如果二进制文件是使用 -g 选项编译的,"Source"(源代码)选项卡将显示程序的源代码。由于 Uncover 在二进制文件级别上校验您的程序,并且已使用优化设置编译程序,因此,此选项卡中的覆盖率信息很难解释。

"Source"(源代码)选项卡中的 "Instr Exec"(指令执行)计数器显示了为每个源代码行执行的指令数,它本质上是语句级别的代码覆盖率信息。非零值表示该语句已覆盖;零值表示该语句未覆盖。变量声明和注释没有指令执行计数。

性能分析器的 Uncover 报告的 "Source"(源代码)选项卡

"Disassembly"(反汇编)选项卡

如果在 "Source"(源代码)选项卡中选择一行,然后选择 "Disassembly"(反汇编)选项卡,分析器将在二进制文件中查找选定的行,并显示其反汇编。

此选项卡中的 "Instr Exec"(指令执行)计数器显示了每个指令的执行次数。

性能分析器的 Uncover 报告的 "Disassembly"(反汇编)选项卡

"Inst-Freq"(指令频率)选项卡

"Inst-Freq"(指令频率)选项卡显示总的覆盖率摘要。

性能分析器的 Uncover 报告的 "Inst-Freq"(指令频率)选项卡