Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

tcov(1)

Name

tcov - 源代码测试覆盖分析和源代码行分析

Synopsis

tcov [ -a ] [ -n ] [ -o filename ] [ -p oldpath newpath ]
     -x profile_directory source_files ...

Description

tcov 可分析所编译程序的测试覆盖范围。tcov 接受源文件作为参数,生成带有执行计数注释的测试覆盖列表作为输出。测试覆盖列表中的执行计数与所编译代码的“基本块”关联,其中“基本块”是始终从头至尾执行的连续指令序列。

开始所编译代码的新基本块的每个源代码行(或指定了 tcov 选项 -a 时的每个源代码行)在测试覆盖列表中以源代码行的第一个基本块执行的次数为前缀。开始尚未执行的基本块的源代码行在列表中以 "#####" 为前缀。

要使用 tcov,必须使用编译器选项 -xprofile=tcov[:profile_directory] 编译并链接一个或多个程序,其中可选的 profile_directory 指定要在执行时存储分析数据的目录的 UNIX 路径名。如果编译和链接在不同的步骤中执行,则应该使用编译步骤中使用的同一个 -xprofile 选项链接程序;不得直接使用 ld

每次执行以 -xprofile=tcov[:profile_directory] 编译的程序时,都会在分析目录中更新执行分析计数器,该目录在编译时或程序首次执行时创建,具体取决于编译时是否指定了可选参数 profile_directory

执行时检测到对象文件中的更改时,会将更改的对象文件的分析计数器重置为 0。检测到更改的对象文件后重置为 0 的分析计数器集的范围可使用环境变量 SUN_PROFDATA_REPLACE 进行修改。有关 SUN_PROFDATA_REPLACE 的详细信息可在 cc(1)、CC(1) 或 f95(1) 的手册页中找到。

使用 -xprofile=tcov[:profile_directory] 编译的程序执行至少一次后,tcov 可以在指定的分析目录以及一个或多个源文件中运行。tcov 会使用该分析目录中的数据针对每个源文件创建带有执行计数注释的测试覆盖列表。测试覆盖列表将写入名为 source_file.tcov 的文件,其中 source_file 是源文件的 UNIX 基名。

包含有效分析数据的分析目录的位置必须使用 tcov -x profile_directory 选项指定,也可选择通过设置环境变量 SUN_PROFDATA_DIR 进行限定。请参见下文的“环境”。

Options

-a

为每个源代码行显示执行计数;如果未指定 -a,则仅为每个基本代码块的第一个源代码行显示执行计数。

-n

显示 n 个最常执行的源代码行的行号及其执行计数的表。

-o filename

将输出定向到 filename 而非 file.tcov。如果 filename 是 "-",则将输出定向到标准输出而非 file.tcov。此选项将覆盖由环境变量 TCOVDIRSUN_PROFDATA_DIR(请参见下文的“环境”)指定的任何目录。

-p originalpath newpath

如果源文件的路径在您运行 tcov 时与您编译它们时不同,-x 选项会感到混乱。这种情况经常发生的原因是,您使用两台不同的计算机,这两台计算机上同一个目录的挂载点不同。此选项允许您告知 tcov,在编译时带有路径前缀 originalpath 的所有源文件目前在 tcov 运行时带有路径前缀 newpath。您可以根据需要指定任意多个 -p 选项。

-x profile_directory

此选项指定包含通过运行以 -xprofile=tcov 编译器标志编译的程序累积的测试覆盖数据的分析目录。profile_directory 是包含测试覆盖数据的目录的名称。通常,这将是 program.profile/,其中 program 是编译的可执行文件的名称。(例如 a.out.profile)。

Examples

Example 1 创建分析目录。

以下示例在编译程序 a.out 时创建名为 /var/demo/data.profile 的分析目录:

 
demo% cc -xprofile=tcov:/var/demo/data.profile alpha.c beta.c gamma.c
demo% ./a.out
demo% tcov -x /var/demo/data.profile alpha.c beta.c gamma.c
demo% cat alpha.c.tcov beta.c.tcov gamma.c.tcov
Example 2 在当前工作目录中创建一个分析目录。

以下示例在首次运行程序 a.out 时在当前工作目录中创建名为 a.out.profile 的分析目录:

demo% cc -xprofile=tcov alpha.c beta.c gamma.c
demo% ./a.out
demo% tcov -x a.out.profile alpha.c beta.c gamma.c
demo% cat alpha.c.tcov beta.c.tcov gamma.c.tcov

Environment Variables

TCOVDIR

与下方的 SUN_PROFDATA_DIR 相同。

SUN_PROFDATA_DIR

如果设置了 SUN_PROFDATA_DIR,其值指定 tcov 将从中查找分析目录并写入测试覆盖列表文件的目录的 UNIX 路径名。如果未设置 SUN_PROFDATA_DIR,tcov 将在当前工作目录中查找分析目录并写入测试覆盖列表文件。

如果同时设置了 TCOVDIRSUN_PROFDATA_DIR,将发出警告并使用 SUN_PROFDATA_DIR

SUN_PROFDATA

如果设置了 SUN_PROFDATA,其值指定在没有指定的分析目录的情况下使用 -xprofile=collect-xprofile=tcov 编译的程序的分析目录的名称。如果未设置 SUN_PROFDATA,则分析目录的名称是 program.profile,其中 program 是程序的 UNIX 基名。

设置 SUN_PROFDATA 对 tcov 本身没有影响。

Files

program.profile

在编译时未指定分析目录的情况下所编译程序的分析目录的名称

source_file.tcov

测试覆盖列表文件;包括源文件后缀,例如:alpha.c.tcov

另请参见上文的 SUN_PROFDATA_DIR 和 SUN_PROFDATA 环境变量。

See also

cc (1) 、 CC (1) 、 f95 (1) 、 gprof (1) 、 prof (1) 、 exit (2)

Diagnostics

"no data for source file in profile_directory"

针对指定的分析目录不包含任何数据的源文件发出。

Notes

不调用 exit()、从 main() 返回或使用异步分析收集的程序不会累积测试覆盖数据。 cc (1) 、 CC (1) 和 f95 (1) 的手册页中对异步分析收集进行了讨论。