lcov 和 gcovr -r 命令正在为 UT 生成 cpp 文件代码覆盖率报告

Posted

技术标签:

【中文标题】lcov 和 gcovr -r 命令正在为 UT 生成 cpp 文件代码覆盖率报告【英文标题】:lcov and gcovr -r commands are generating the cpp file code coverage report for UT 【发布时间】:2020-07-25 23:11:29 【问题描述】:

lcovgcovr -r . 没有为 *.cpp 文件生成代码覆盖率报告。

我是 googletest 框架的新手。我编写了一个 UT 来测试代码功能,并在 Makefiles 中使用选项 -fprofile-arcs -ftest-coverage --coveragelgcov 编译了代码。执行测试用例后,我可以看到 *.gcno.gcda 文件。但没有得到正确的代码覆盖率报告。

第 1 步:更新 Makefile --> -fprofile-arcs -ftest-coverage --coverage 第 2 步:构建代码。 第 3 步:运行测试用例。 第四步:gcovr -r .

观察到:未获得执行测试用例的 *.cpp 文件覆盖率。

【问题讨论】:

【参考方案1】:

我在设置测试覆盖率时遇到了一些麻烦,但我终于让它工作了。虽然我没有使用你正在使用的工具。

我正在使用 clang++ 和 LLVM 工具。而且我正在使用我自己的准系统单元测试框架,它类似于 Catch2(但不如 Catch2 功能全面)。

以下是我运行的命令,以防对您有所帮助:

clang++ -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded -Wno-c99-compat -pedantic -fsanitize=undefined,null -std=c++17 -O0 -g -fprofile-instr-generate -fcoverage-mapping Experiment.cpp

./a.out --test-noisy --test-only

llvm-profdata merge -sparse default.profraw -o default.profdata

llvm-cov show -format=html -tab-size=4 ./a.out -instr-profile=default.profdata Experiment.cpp > default.html

echo '<style>pre  font-family: Monaco, Consolas, monospace; </style>' >> default.html

我想在评论中回复,但此回复太长,需要格式化以确保易读性。如果认为不合适(通过投票),我会删除它。

【讨论】:

以上是关于lcov 和 gcovr -r 命令正在为 UT 生成 cpp 文件代码覆盖率报告的主要内容,如果未能解决你的问题,请参考以下文章

gcovr 和 Xcode 5 的代码覆盖率不起作用

gtest&gcovr&ccn

gcov代码覆盖率测试-原理和实践总结

展示C代码覆盖率的gcovr工具简单介绍及相关命令使用演示样例

寻找一种方法来排除 geninfo/genhtml 使用的文件

GCOV入门