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 【问题描述】:lcov
和 gcovr -r .
没有为 *.cpp 文件生成代码覆盖率报告。
我是 googletest 框架的新手。我编写了一个 UT 来测试代码功能,并在 Makefiles 中使用选项 -fprofile-arcs -ftest-coverage --coverage
和 lgcov
编译了代码。执行测试用例后,我可以看到 *.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 文件代码覆盖率报告的主要内容,如果未能解决你的问题,请参考以下文章
展示C代码覆盖率的gcovr工具简单介绍及相关命令使用演示样例