[英]gcov generates empty coverage for c
我正在尝试为在Ubuntu上具有c ++和c代码的项目收集代码覆盖率。
我使用'-fprofile-arcs'和'-ftest-coverage'值作为CXXFLAGS和CFLAGS; '-lgcov'作为LINKFLAGS。
常见的C项目结构是:
c_code\
src
unit_tests
src包含静态库的源代码。
unit_tests dir包含用googletest框架编写的测试,例如种类测试
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
对于与C相关的gcda文件,lcov的日志显示以下内容:
gcov没有为“my_c_gcda_location / * .gcda”创建任何文件
也有类似的错误:
* .gcda:与备注文件不匹配
我应该指定一些额外的参数还是执行一些额外的操作来获得C的覆盖率结果? 或者这些问题的原因是什么?
当.gcda文件比.gcno文件更新时,您可能会收到“戳记不匹配”。
它主要有两个原因:1。您可能在运行测试之后和跟踪文件生成之前重新构建代码。 2.二进制文件可以在一台机器上构建,测试在其他机器上运行,其时间早于构建机器。
对于这两种情况,您必须确保.gcda的文件创建时间大于.gcno和.c *文件。
您只需执行“touch * .gcda”,然后运行lcov命令即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.