问题描述
当我运行一次单元测试可执行文件时,我习惯于在 GCOV 文件中看到这些标题行:
-: 0:Source:../../src/file1.c
-: 0:Graph:build/file1.gcno
-: 0:Data:build/file1.gcda
-: 0:Runs:1
-: 0:Programs:1
但是,有时我会看到如下所示的标题:
-: 0:Source:../../src/file2.c
-: 0:Programs:2
我不确定为什么标题看起来不同。两个测试目录/makefile 的设置方式相同。文件 2 的覆盖率数据看起来也完全正确。
具体为什么是“程序:2”?这条线是什么意思?我查看了 man page,但找不到对该标题含义的任何解释。直觉上,我认为这意味着关联的对象被链接到可执行文件两次而不是一次。但事实并非如此,只有一个可执行文件,而且只运行一次。
编辑:我使用的是 gcov 7.5.0。
解决方法
gcov 7.5.0 的来源是 here。
下面的代码段显示了打印标题的位置。 File2 恰好位于包含多个源文件的目录中。因此,图表、数据和运行标题被省略。
File: gcov.c
2506: fprintf (gcov_file,"%9s:%5d:Source:%s\n","-",src->coverage.name);
2507: if (!multiple_files)
2508: {
2509: fprintf (gcov_file,"%9s:%5d:Graph:%s\n",bbg_file_name);
2510: fprintf (gcov_file,"%9s:%5d:Data:%s\n",2511: no_data_file ? "-" : da_file_name);
2512: fprintf (gcov_file,"%9s:%5d:Runs:%u\n",object_runs);
2513: }
2514: fprintf (gcov_file,"%9s:%5d:Programs:%u\n",program_count);
2515:
program_count
在第 1570 行递增。我假设这会发生两次,因为有两个数据文件。