将Gcov测试名称保留在GCDA文件中

时间:2018-07-20 14:28:12

标签: gcov lcov gcovr

在使用lcov(适用于C ++开发人员)对产品进行测试后,我想绘制一个矩阵,使测试名称与测试文件之间具有对应关系。
这样做的目的是快速查看由1个测试文件覆盖的代码。

例如:

xxxx |文件1 |文件2 |文件3 |文件4 |文件5 |
测试1 |是的否|是的是的是|
测试2 |是的否|否|没有否|
测试3 |是的是的否|否|是的

在我的项目中,我需要运行成千上万的测试来检查成千上万文件的覆盖范围,因此矩阵将非常庞大。

不幸的是,似乎设计上GCOV不能按这种方式工作,因为我们只有一组覆盖整个代码的gcda文件,而且似乎无法确定哪个测试覆盖了代码的哪一部分。 / p>

我能想到的唯一解决方案是以下解决方案:

for current_test in all_tests do:
    run 1 current_test
    retrieve gcda -> .info file
    extract from the .info file the name of covered code files
    append the matrix with current_test / code filename

问题在于这将非常漫长,因为这样做会花费大约5分钟的时间进行1次测试...我将花数周的时间来等待...

任何想法都会受到欢迎。

非常感谢您的帮助。 问候, 托马斯

1 个答案:

答案 0 :(得分:1)

不幸的是,gcov数据不包含测试名称,必须在后处理中添加它们。因此,如果您停留在基于gcov的覆盖范围内,那么循序循环是明智的选择。

您可以尝试解决的方法:

  • 使用适当的GCOV_PREFIX变量运行测试,以便将覆盖范围写入其他目录,而不是目标文件旁边。

  • 使用其他覆盖率工具。例如。 kcov执行运行时检测,并将覆盖率结果写入您指定的目录中。但是,coverage数据格式不适用于基于gcov的工具。

  • 在多台计算机上分布测试。

我的猜测是GCOV_PREFIX可能会在您的情况下工作,以便您可以轻松地并行运行测试。这个变量有点怪异,因为您需要了解目标文件的绝对路径,但是要弄清楚这一点可能要比等待几天的覆盖率矩阵容易得多。