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
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 用户指南。
uncover 接受以下选项:
输出帮助消息。
将错误数据写入 binary_name.analyze/coverage 目录,以供代码分析器使用。
打开指令、块和函数的执行计数报告。缺省情况下,仅报告已覆盖或未覆盖的代码的信息。检测二进制文件和生成覆盖报告时,均指定该选项。
在指定的目录 dir 中创建覆盖数据。如果未指定,则使用当前的工作目录。覆盖数据目录将在 dir 目录下被命名为 target.uc。
打开或关闭性能分析器的调用。缺省值为 on。
以 HTML 格式显示 dir 中的覆盖数据。当指定时,将调用缺省浏览器以显示 dir 中存储的覆盖数据。
在检测您的程序时,打开并关闭线程安全分析。缺省值为 on。将该选项与 -c 运行时选项结合使用。如果使用 -m off 检测使用线程的二进制文件,则该二进制文件会在运行时失败,并且显示一条消息,要求您使用 -m on 重新检测该二进制文件。
不启动 GUI 查看器来显示覆盖数据。未指定 -n 和 -H 选项时,将调用 Studio 性能分析器以显示覆盖数据。
将检测过的二进制文件写入 output_binary_file。缺省情况下,使用检测过的文件覆盖输入二进制文件。
以 ASCII 文本形式显示文件 file 中的覆盖数据。
打开详细模式,显示命令各步骤的详细信息。
输出当前版本。
本示例将首先检测二进制文件 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.ucExample 3 以 HTML 格式显示覆盖数据。
与示例 #1 类似,但是执行二进制文件三次。要显示的覆盖数据在目录 a.out.html 中采用 HTML 格式。将调用缺省浏览器来显示该数据。
% uncover a.out % a.out; a.out; a.out % uncover -H a.out.html a.out.ucExample 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 ============================================================
CC (1) 、 cc (1) 、 f95 (1) 、gcc(1)、g++(1)