LCOV报道:'geninfo:负长度'

时间:2014-01-28 12:39:54

标签: code-coverage gcov lcov

我正在两个系统上分析带有LCOV的C代码(Windows 7,cygwin,Lcov 1.10)。在一个系统上,我从来没有遇到过问题,但在另一个系统上我得到了相同的代码:

$ lcov --directory CMakeFiles/UnitTest.dir/main --capture --output-file lcov.log
Capturing coverage data from CMakeFiles/UnitTest.dir/main
Found gcov version: 4.8.2
Scanning CMakeFiles/UnitTest.dir/main for .gcda files ...
Found 59 data files in CMakeFiles/UnitTest.dir/main
Processing analyze/analyze.c.gcda
[..]
Processing measure/measur.c.gcda
geninfo: Negative length at /usr/bin/geninfo line 2413.

在两个系统上,文件夹和文件是相同的(通过subversion版本控制)。我想,也许某些路径可能存在问题。 有人知道这是关于什么的吗? 谢谢,领导

附录:我发现有些事情可以帮助完全清理项目(删除所有CMakeFiles和CMakeCache)并重新运行lcov命令。

1 个答案:

答案 0 :(得分:6)

如果某个块(之前已捕获覆盖率信息的块)不再存在于目标文件中,则会发生这种情况。 问题是.gcno文件仍然会存储这样一个块的覆盖率信息。

要解决此问题,只需删除.gcno文件并重建单元测试即可。

例如,我遇到了这样的错误:

[...]
Processing CMakeFiles/UnitTest.dir/main.cpp.gcda
[...]
Processing CMakeFiles/UnitTest.dir/Math/BoundingBox.cpp.gcda
geninfo: Negative length at /usr/bin/geninfo line 2413.
Processing CMakeFiles/UnitTest.dir/Math/Vectors.cpp.gcda
make[3]: *** [source/CMakeFiles/] Error 255

在这种情况下,删除“CMakeFiles / UnitTest.dir / Math / Vectors.cpp.gcno”文件然后重建“UnitTest”项目就足够了。