我正在尝试在更新到Ubuntu 16.04之后对我的项目进行覆盖。 我得到了
{{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尝试最新的快照。