Oracle® Solaris Studio 12.4:Discover 和 Uncover 用户指南

退出打印视图

更新时间: 2015 年 12 月
 
 

使用 uncover

    使用 Uncover 生成覆盖信息的过程分为三个步骤:

  1. 检测二进制文件

  2. 运行检测过的二进制文件

  3. 生成并查看覆盖报告

本节介绍了三个步骤,并提供了使用 Uncover 的示例。

检测二进制文件

输入的二进制文件可以是可执行文件或共享库。必须分别检测要分析的每个二进制文件。

使用 uncover 命令检测二进制文件。例如,以下命令将检测二进制文件 a.out,并使用检测过的 a.out 来覆盖输入 a.out。该命令还将创建一个后缀为 .uc 的目录(本例中为 a.out.uc),将在该目录中收集覆盖数据。输入二进制文件的副本保存在此目录中。

$ uncover a.out

检测二进制文件时,可以使用以下选项:

–c

启用指令、块和函数的执行计数报告。缺省情况下,仅报告已覆盖或未覆盖的代码的信息。检测二进制文件和生成覆盖报告时,均指定该选项。

–d directory

directory 中创建覆盖数据目录。当您为多个二进制文件收集覆盖数据时,此选项十分有用,因为所有覆盖数据目录都是在同一个目录中创建的。此外,如果从不同的位置运行同一个检测过的二进制文件的不同实例,使用此选项可确保在同一个覆盖数据目录中累积所有这些运行中的覆盖数据。

如果不使用 –d 选项,将在当前运行目录中创建覆盖数据目录。

–m on | off

启用或禁用线程安全分析。缺省值为 on。将该选项与 –c 运行时选项结合使用。如果使用 –m off 检测使用线程的二进制文件,则该二进制文件会在运行时失败,并且显示一条消息,要求您使用 –m on 重新检测该二进制文件。

–o output-binary-file

将检测过的二进制文件写入指定的文件。缺省情况下,使用检测过的文件覆盖输入二进制文件。

如果对某个已检测的输入二进制文件运行 uncover 命令,uncover 将发出错误消息,指出已检测该二进制文件,无法再次检测,您可以运行该二进制文件来生成覆盖数据。

运行检测过的二进制文件

检测二进制文件后,您可以按正常方式运行它。每次运行检测过的二进制文件时,都会在 uncover 执行检测期间创建的、后缀为 .uc 的覆盖数据目录中收集代码覆盖数据。由于 uncover 数据收集是多线程安全的,并且是多进程安全的,因此,对进程中的并发运行数量或线程数量没有限制。覆盖数据将累积所有的运行和线程。

生成并查看覆盖报告

要生成覆盖报告,请对覆盖数据目录运行 uncover 命令。例如:

$ uncover a.out.uc

此命令将根据 a.out.uc 目录中的覆盖数据生成一个名为 binary-name.er 的 Oracle Solaris Studio 性能分析器实验目录,启动性能分析器 GUI,并显示该实验。当前目录或起始目录中存在 .er.rc 文件可能会影响性能分析器显示实验的方式。有关 .er.rc 文件的更多信息,请参见Oracle Solaris Studio 12.4:性能分析器

可以生成 HTML 格式的报告在 Web 浏览器中查看它,或者生成 ASCII 格式的报告在终端窗口中进行查看。还可以将数据定向到代码分析器可以分析和显示它的目录。

–a

将错误数据写入 binary-name.analyze/coverage 目录以供代码分析器使用。

–c

启用指令、块和函数的执行计数报告。缺省情况下,仅报告已覆盖或未覆盖的代码的信息。(检测二进制文件和生成覆盖报告时,均指定该选项。)

–e on | off

确定是否为覆盖报告生成实验目录以及是否在性能分析器 GUI 中显示实验。缺省值为 on

–H html-directory

在指定的目录中以 HTML 格式保存覆盖数据,并在 Web 浏览器中自动显示这些数据。

–h–?

显示帮助。

–n

生成覆盖报告,但不启动性能分析器或 Web 浏览器等查看器。

–t ascii-file

在指定的文件中生成 ASCII 覆盖报告。

–V

输出 uncover 版本并退出。

–v

详细。输出 Uncover 正在执行的操作的日志。

仅启用一种输出格式。如果指定多个输出选项,则 uncover 使用命令中的最后一个选项。

示例 2  uncover 命令示例
$ uncover a.out

此命令将检测二进制文件 a.out,覆盖输入 a.out,在当前目录中创建 a.out.uc 覆盖数据目录,并在 a.out.uc 目录中保存输入 a.out 的副本。如果已检测 a.out,将显示警告消息,并且不执行检测。

$ uncover -d coverage a.out

此命令在目录 coverage 中创建 a.out.uc 覆盖目录。

$ uncover a.out.uc

此命令会使用 a.out.uc 覆盖目录中的数据在工作目录中创建代码覆盖实验 (a.out.er),并启动性能分析器以显示该实验。

$ uncover -H a.out.html a.out.uc

此命令使用 a.out.uc 覆盖目录中的数据在 a.out.html 目录中创建 HTML 代码覆盖报告,并在 Web 浏览器中显示该报告。

$ uncover -t a.out.txt a.out.uc

此命令使用 a.out.uc 覆盖目录中的数据在 a.out.txt 文件中创建 ASCII 代码覆盖报告。

$ uncover -a a.out.uc

此命令会使用 a.out.c 覆盖目录中的数据在 binary-name.analyze/coverage 目录中创建覆盖报告,以供代码分析器使用。