Sun Studio 12:Fortran 编程指南

8.3 tcov 剖析命令

tcov(1) 命令用于使用 -xprofile=tcov 选项编译的程序时,会生成源代码的逐句剖析信息,显示执行了哪些语句以及执行频率。它还会给出有关程序基本块结构的信息摘要。

增强的语句级覆盖范围通过 -xprofile=tcov 编译器选项和 tcov -x 选项调用。输出源文件的副本,并在页边空白处注以语句执行计数。


注 –

如果编译器内联了例程调用,则 tcov 生成的代码覆盖范围报告不可靠。无论何时,只要合适,编译器均会以 -O3 以上的优化级别并根据 -inline 选项内联调用。有内联发生时,编译器会用被调用例程的实际代码替换例程的调用。而且,由于无任何调用,因此 tcov 不会报告对这些内联例程的引用。因此,要获得精确的覆盖报告,请不要启用编译器内联。


8.3.1 增强的 tcov 分析

要使用 tcov,请使用 -xprofile=tcov 进行编译。运行程序时,覆盖范围数据存储在 program.profile/tcovd 中,其中 program 是可执行文件的名称。(如果可执行文件是 a.out,则会创建 a.out.profile/tcovd。)

可运行 tcov -x dirname source_files 创建与每个源文件合并在一起的覆盖范围分析。相应的报告写入当前目录中的 file.tcov

运行一个简单示例:


demo% f95 -o onetwo -xprofile=tcov one.f two.f
demo% onetwo
       ... output from program
demo% tcov -x onetwo.profile one.f two.f
demo% cat one.f.tcov two.f.tcov
                       program one
      1 ->             do i=1,10
     10 ->                   call two(i)
                       end do
      1 ->             end
       .....etc
demo%

环境变量 $SUN_PROFDATA$SUN_PROFDATA_DIR 可以用于指定中间数据收集文件的保存位置。这些文件是由旧式和新式 tcov 分别创建的 *.dtcovd 文件。

这些环境变量可以用来分离来自不同次运行的收集数据。设置了这些变量后,运行程序便会将执行数据写入 $SUN_PROFDATA_DIR/$SUN_PROFDATA/ 中的文件。

同样,tcov 读取的目录也通过 tcov -x $SUN_PROFDATA 指定。如果设置了 $SUN_PROFDATA_DIRtcov 会对其进行预置,从而在 $SUN_PROFDATA_DIR/$SUN_PROFDATA/ 中查找文件,而不是在工作目录中查找。

随后的每次运行都会将更多的覆盖范围数据累加到 tcovd 文件中。当程序在相应源文件重新编译后首次执行时,会将每个目标文件的数据全部清零。删除 tcovd 文件会将整个程序的数据全部清零。

有关详细信息,参见 tcov(1) 手册页。