gcov为c生成空的覆盖范围

时间:2014-12-03 15:58:39

标签: c linux code-coverage gcov lcov

我正在尝试为在Ubuntu上具有c ++和c代码的项目收集代码覆盖率。

我使用'-fprofile-arcs'和'-ftest-coverage'值作为CXXFLAGS和CFLAGS; '-lgcov'作为LINKFLAGS。

Common C项目结构是:

c_code\
     src
     unit_tests

src包含静态库的来源。

unit_tests dir包含用googletest框架编写的测试e。 G。实物测试

TEST_F(test_case_name, test_name) {
    some_gtest_assertions;
}

构建googletest二进制文件后,应该包含要在其内部进行测试的静态库。

构建和运行项目二进制文件会导致生成* .gcno和* .gcda文件。但是我的C覆盖率结果为空(C ++生成良好)。

lcov命令具有以下格式:

lcov --capture --directory my_c_gcda_location --output-file c_coverage.info

lcov的日志显示以下与C相关的gcda文件:

  

gcov没有为“my_c_gcda_location / * .gcda”创建任何文件。“

也有类似的错误:

  

* .gcda:邮票与备注文件不匹配

我是否应该指定一些额外的参数或执行一些额外的操作来获得C的覆盖率结果?或者这些问题可能是什么原因?

1 个答案:

答案 0 :(得分:2)

当.gcda文件比.gcno文件更新时,您可能会收到“邮票不匹配”。

这主要有两个原因: 1.您可能在运行测试之后和跟踪文件生成之前重新构建代码。 2.二进制文件可以在一台机器上构建,测试在其他机器上运行,其时间早于构建机器。

对于这两种情况,您必须确保.gcda的文件创建时间大于.gcno和.c *文件。

你可以通过“touch * .gcda”然后运行lcov命令来做到这一点。