生成输出
要生成覆盖信息,应执行编译的程序。在为测试套件创建代码覆盖时,此执行步骤通常由测试套件执行,以便覆盖范围显示测试执行的程序部分和不执行的程序。
$ 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 文件的情况下再次执行示例程序,则执行源中每一行的次数的计数将添加到上一次运行的结果中。