生成输出

要生成覆盖信息,应执行编译的程序。在为测试套件创建代码覆盖时,此执行步骤通常由测试套件执行,以便覆盖范围显示测试执行的程序部分和不执行的程序。

$ a.out

执行该程序将导致在与目标文件相同的目录中生成 .gcda 文件。

随后,你可以使用程序的源文件名作为参数调用 gcov,以生成具有每行执行频率的代码列表。

$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'

结果包含在 .gcov 文件中。这是一个示例:

         -:    0:Source:hello.c
         -:    0:Graph:hello.gcno
         -:    0:Data:hello.gcda
         -:    0:Runs:1
         -:    0:Programs:1
         -:    1:#include <stdio.h>
         -:    2:
         -:    3:int main (void)
         1:    4:{
         1:    5:  int i;
         -:    6:
         1:    7:  i = 0;
         -:    8:
         -:    9:
         1:   10:  if (i != 0)
     #####:   11:    printf ("Goodbye!\n");
         -:   12:  else
         1:   13:    printf ("Hello\n");
         1:   14:  return 0;
         -:   15:}

在这里,你可以看到行号和来源以及每行执行的次数。如果一行未执行,则标记为 #####

执行计数是累积的。如果在不删除 .gcda 文件的情况下再次执行示例程序,则执行源中每一行的次数的计数将添加到上一次运行的结果中。