gcov 中的 "Programs" header 行是什么意思

What does the "Programs" header line in gcov mean

当我 运行 一次单元测试可执行文件时,我习惯于在 GCOV 文件中看到这些 header 行:

        -:    0:Source:../../src/file1.c
        -:    0:Graph:build/file1.gcno
        -:    0:Data:build/file1.gcda
        -:    0:Runs:1
        -:    0:Programs:1

但是,有时我看到 header 看起来像这样:

        -:    0:Source:../../src/file2.c
        -:    0:Programs:2

我不确定为什么 header 看起来不一样。两个测试 directories/makefiles 的设置方式相同。文件 2 的覆盖率数据看起来也完全正确。

具体为什么是“Programs:2”?这条线是什么意思?我查看了 man page,但找不到有关该标题含义的任何解释。直觉上,我认为这意味着关联的 object 被链接到可执行文件中两次而不是一次。但事实并非如此,只有一个可执行文件,而且只有 运行 一次。

编辑:我正在使用 gcov 7.5.0。

gcov 7.5.0 的来源是here

下面的代码片段显示了 headers 的打印位置。 File2 恰好位于具有多个源文件的目录中。因此,图表、数据和运行 headers 被省略。

File: gcov.c
2506:   fprintf (gcov_file, "%9s:%5d:Source:%s\n", "-", 0, src->coverage.name);
2507:   if (!multiple_files)
2508:     {
2509:       fprintf (gcov_file, "%9s:%5d:Graph:%s\n", "-", 0, bbg_file_name);
2510:       fprintf (gcov_file, "%9s:%5d:Data:%s\n", "-", 0,
2511:          no_data_file ? "-" : da_file_name);
2512:       fprintf (gcov_file, "%9s:%5d:Runs:%u\n", "-", 0, object_runs);
2513:     }
2514:   fprintf (gcov_file, "%9s:%5d:Programs:%u\n", "-", 0, program_count);
2515: 

program_count 在第 1570 行递增。我假设这发生了两次,因为有两个数据文件。