Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

uncover(1)

Name

uncover - 代码覆盖工具

Synopsis

uncover
     [-?]  [-h] [-c] [-d dir] [-m {on | off}]
     [-o output_binary_file] [-v] [-V] target
uncover
     [-?] [-h] [-a] [-c] [-e {on|off}] [-H dir] [-n]
     [-t file] [-v] [-V] target.uc

Description

uncover 是一个用于度量应用程序代码覆盖的命令行工具。该工具可显示有关测试期间运用的应用程序区域的信息。此工具可以在函数、语句、基本块或指令级别报告覆盖信息。

通过首先检测二进制文件然后执行二进制文件来完成度量。执行后,您可以根据执行查询覆盖数据。您可以执行二进制文件多次,覆盖数据是多次执行的累积。

target 是要为其生成代码覆盖数据的二进制文件。target.uc 是生成并存储代码覆盖数据的目录。

uncover 与使用低于 Sun Studio 12 Update 1 的 Studio 版本编译的二进制文件不兼容。它适用于运行 Solaris 10 10/08 操作系统(或更高的 Solaris 10 Update 版本)或 Oracle Solaris 11 的基于 SPARC 或基于 x86 的系统。

uncover 可与使用 Oracle Solaris Studio 编译器生成的任何库结合使用,但与生成时不使用任何优化选项的库结合使用效果最好。(以前的 uncover 发行版至少需要 -O1 优化级别。)如果二进制文件是使用优化选项编译的,uncover 结果在较低的优化级别(-O1-O2)较好。uncover 使用通过 -g 选项构建二进制文件时生成的调试信息将指令与行号相关联,由此派生源代码行级覆盖。在优化级别 -O3 及更高级别,编译器可能会删除可能从不执行的或冗余的某一代码,这可能导致没有任何二进制文件指令用于某些源代码行。在此类情况下,将不会为这些行报告任何覆盖信息。

使用以下任何编译器选项编译的二进制文件都与 uncover 不兼容:-p-pg-qp、-xpg-xlinkopt

有关更多信息,请参见 Discover 和 Uncover 用户指南

Options

uncover 接受以下选项:

-?
-h

输出帮助消息。

-a

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

-c

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

-d dir

在指定的目录 dir 中创建覆盖数据。如果未指定,则使用当前的工作目录。覆盖数据目录将在 dir 目录下被命名为 target.uc

-e {on|off}

打开或关闭性能分析器的调用。缺省值为 on

-H dir

以 HTML 格式显示 dir 中的覆盖数据。当指定时,将调用缺省浏览器以显示 dir 中存储的覆盖数据。

-m {on|off}

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

-n

不启动 GUI 查看器来显示覆盖数据。未指定 -n-H 选项时,将调用 Studio 性能分析器以显示覆盖数据。

-o output_binary_file

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

-t file

以 ASCII 文本形式显示文件 file 中的覆盖数据。

-v

打开详细模式,显示命令各步骤的详细信息。

-V

输出当前版本。

Examples

Example 1 检测、执行和显示 a.out 的覆盖数据。

本示例将首先检测二进制文件 a.out,然后执行该二进制文件,最后通过调用性能分析器显示存储在 a.out.uc 中的 a.out 的覆盖数据。

% uncover a.out
% a.out
% uncover a.out.uc

注意:只需检测感兴趣的二进制文件一次。

Example 2 生成覆盖数据目录。

与示例 #1 类似,但是在目录 abc 下生成覆盖数据目录 a.out.uc

% uncover -d abc a.out
% a.out
% uncover abc/a.out.uc
Example 3 以 HTML 格式显示覆盖数据。

与示例 #1 类似,但是执行二进制文件三次。要显示的覆盖数据在目录 a.out.html 中采用 HTML 格式。将调用缺省浏览器来显示该数据。

% uncover a.out
% a.out; a.out; a.out
% uncover -H a.out.html a.out.uc
Example 4 Uncover 生成的 ASCII 覆盖报告的示例。

下面是 uncover 生成的 ASCII 覆盖报告的示例:

 
% uncover -t unc.report a.out.uc
Creating experiment database a.out.er ...
% cat unc.report
UNCOVER Code Coverage
Total Functions: 6
Covered Functions: 3
Function Coverage: 50.0%
Total Executable Source Lines (Excludes redundant code removed by
compiler): 38
Source Line Coverage: 57.9%
Total Basic Blocks: 19
Covered Basic Blocks: 11
Basic Block Coverage: 57.9%
Total Basic Block Executions: 11
Average Executions per Basic Block: 0.58
Total Instructions: 149
Covered Instructions: 75
Instruction Coverage: 50.3%
Total Instruction Executions: 75
Average Executions per Instruction: 0.50
Number of times this program was executed: 1
Functions sorted by metric: Exclusive Uncoverage

Excl.       Excl.     Excl.  Excl.      Excl.       Name
Uncoverage  Function  Instr  Block      Instr
            Count     Exec   Covered %  Covered %
172         3         75     238        225         <Total>
 80         0          0       0          0         t3
 60         0          0       0          0         bar
 32         0          0       0          0         t2
  0         1         16      75         45         foo
  0         1         51      63         80         main
  0         1          8     100        100         t1

Instruction frequency data from experiment a.out.er

Instruction frequencies of /export/home1/uncover.demo/a.out.uc/a.out
Instruction          Executed     ()
 TOTAL                     75 (100.0)
 float ops                  0 (  0.0)
 float ld st                0 (  0.0)
 load store                12 ( 16.0)
 load                       8 ( 10.7)
 store                      4 (  5.3)
--------------------------------------
Instruction          Executed     ()        Annulled   In Delay Slot
 TOTAL                     75 (100.0)
 call                      13 ( 17.3)              0               0
 add                        9 ( 12.0)              0               5
 sethi                      9 ( 12.0)              1               3
 nop                        7 (  9.3)              0               7
 br                         6 (  8.0)              0               0
 lduw                       6 (  8.0)              0               0
 or                         5 (  6.7)              0               2
 subcc                      5 (  6.7)              0               0
 stw                        3 (  4.0)              0               0
 save                       3 (  4.0)              0               0
 jmpl                       3 (  4.0)              0               0
 restore                    3 (  4.0)              0               3
 ldsb                       2 (  2.7)              0               1
 stb                        1 (  1.3)              0               0
     ============================================================

See also

CC (1) 、 cc (1) 、 f95 (1) 、gcc(1)、g++(1)