ERROR,而代码覆盖率报告使用lcov

时间:2016-06-07 09:49:43

标签: code-coverage ubuntu-16.04 lcov

我正在尝试在更新到Ubuntu 16.04之后对我的项目进行覆盖。 我得到了

{{1}}

在更新之前,我没有遇到运行覆盖范围的问题

1 个答案:

答案 0 :(得分:4)

在将文件传递给lcov时使用绝对路径而不是相对路径会有帮助吗?

我遇到了类似的问题,其中lcov也无法写入文件。 不确定它是否是lcov中的错误,但问题是它与相对路径混淆:

lcov -a test_fast_cxxtest_gcov__base.info -a test_fast_cxxtest_gcov__test.info \
     -o test_fast_cxxtest_gcov__total.info
Combining tracefiles.
Reading tracefile test_fast_cxxtest_gcov__base.info
Reading tracefile test_fast_cxxtest_gcov__test.info
lcov: WARNING: function data mismatch at /home/phil/ghost/constants.h:1862
Writing data to test_fast_cxxtest_gcov__total.info
lcov: ERROR: cannot write to test_fast_cxxtest_gcov__total.info!

使用strace运行它会显示它在多个位置执行chdir("/"),这会将工作目录更改为/。这就解释了为什么它无法写入文件。

一种解决方法是使用绝对路径。例如,如果您使用的是GNU make,则可以使用abspath命令:

lcov -a $(abspath test_fast_cxxtest_gcov__base.info) \
     -a $(abspath test_fast_cxxtest_gcov__test.info) \
     -o $(abspath test_fast_cxxtest_gcov__total.info)

在更改之后,它终于能够写入文件了。

(据我所见,其他选项,例如尝试使用--base-directory--directory选项设置目录没有效果。 我测试过的lcov版本是1.12。)

问题不仅限于Ubuntu,因为我在Arch Linux上遇到过它。然而,这可能是1.12中引入的回归,所以我报告了它(见issue #77630)。

更新:Lcov不是GCC的一部分,因此我的原始错误报告已关闭,但我从Lcov邮件列表中得到了答案。问题已在提交632c25中得到修复。基于Arch Linux的发行版的用户可以使用aur/lcov-git尝试最新的快照。