JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:Discover 和 Uncover 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  简介

2.  内存错误搜索工具 (Discover)

3.  代码覆盖工具 (Uncover)

Uncover 的使用要求

使用 Uncover

检测二进制文件

运行检测过的二进制文件

生成并查看覆盖报告

示例

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

`Functions`(函数)选项卡

`Uncoverage`(未覆盖)计数器

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

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

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

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

`Source`(源)选项卡

`Disassembly`(反汇编)选项卡

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

了解 ASCII 覆盖报告

了解 HTML 覆盖报告

使用 Uncover 时的限制

只能检测有注释的代码

计算机指令可能不同于源代码

示例 1

示例 2

示例 3

索引

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

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

"Functions"(函数)选项卡

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

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

"Uncoverage"(未覆盖)计数器

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

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

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

覆盖数目是非独占性的。

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

"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"(指令执行)计数器显示了为每个源代码行执行的指令数,它本质上是语句级别的代码覆盖信息。非零值表示该语句已覆盖;零值表示该语句未覆盖。变量声明和注释没有指令执行计数。

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

一些源代码行可能不具有与其相关联的任何覆盖信息。在这些情况下,行为空白,并且所有字段中都没有数字。出现这些行的原因是:

有关更多信息,请参见使用 Uncover 时的限制

"Disassembly"(反汇编)选项卡

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

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

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

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

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

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