lcov对覆盖率的统计不正常

3
我正在尝试使用gcc 4.8.2和lcov 1.10为测试获取html覆盖率。我确信我的源代码、目标文件和gcov文件在同一个位置,并且我也是从运行编译器的目录中运行lcov。
我遇到了以下错误:
$ lcov --capture --directory "objs/i386/MinGW/Os_SingleCore_SC3
/IocTest_tests_SingleCore_SC3" --output-file coverage.info
Capturing coverage data from objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3
Found gcov version: 4.8.2
Scanning objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3 for .gcda files ...
Found 3 data files in objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3
Processing IocTest_tests_SingleCore_SC3/IocTest.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#IocTest.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\IocTest.c
Processing IocTest_tests_SingleCore_SC3/OS_REQ.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#OS_REQ.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\OS_REQ.c
Processing IocTest_tests_SingleCore_SC3/TestMain.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#TestMain.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\TestMain.c
Finished .info-file creation
3个回答

1
首先,我建议检查gcov是否返回正确的覆盖率数据。需要运行gcov工具并检查*.gcov文件以获得实际结果。如果它返回任何覆盖率。
其次,您可以使用--base-directory,例如。
$ lcov --base-directory .  --directory . -c -o gcov/lcov.info

0

我发现以下步骤可行:https://codeflu.blog/2014/12/26/using-gcov-and-lcov-to-generate-beautiful-c-code-coverage-statistics/

你是否先使用-g -O0--coverage标志进行编译?你是否将.build目录中的.gcno文件复制到与.gcda文件相同的目录中?

你尝试过添加选项--ignore-errors gcov,source,graph吗?这可能实际上是从某些文件中工作,这将确保lcov继续运行超过任何问题文件。如果你发现一些文件可以工作,那么你可以退回并找出为什么上面的文件对于lcov不起作用。也许它们缺少相应的.gcno文件。


0

更新 CMakeList.txt 文件以添加以下标志:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)

进入构建目录

cd {project/lib}
rm -rf *  //Remove all items if you want 
cmake ..
make
./MyTest

运行测试用例以获取.gcda文件。可能有其他生成gcda文件的方式,但我更喜欢这种方式。

lcov --capture --directory . --output-file AnyName.info

AnyName.info将包含输出

genhtml AnyName.info --output-directory CODE_COVERAGE

在当前目录中,您会找到一个名为CODE_COVERAGE的文件夹,请进入CODE_COVERAGE并双击index.html,它将显示测试用例的当前代码覆盖率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接