有没有办法将 lcov 代码覆盖率报告集中到一个或两个目录?
-
10-07-2019 - |
题
我最近开始使用 lcov 来可视化我的代码覆盖率。这是一个很棒的工具。
我注意到的一件事是它为我正在使用的所有文件生成代码覆盖率报告 - 包括那些我不感兴趣的文件。例如,它会给我 boost 和 mysql++ 文件的代码覆盖率报告。
有没有一种简单的方法可以强制 lcov 仅生成特定文件的覆盖率报告?
我尝试过使用 -k 参数,如下所示:
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info {run unit tests now} /usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info /usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info /usr/bin/genhtml -q -o lcov_output_directory app_total.info
(这意味着我只需要“include”和“src”目录的覆盖文件。)
然而,这似乎不起作用。该报告仍然向我显示所有无关的文件。非常感谢任何建议。谢谢!
解决方案
lcov 支持命令行参数 - 删除完全按照你的要求去做。
其他提示
我使用--no-external
标志和--directory
标志来排除不需要的文件。
男人的外在定义:
外部源文件是不在--directory或--base-directory指定的某个目录中的文件。
所以我的命令看起来像这样:
$ lcov --directory src -c -o report.info --no-external
Capturing coverage data from src
Found gcov version: 4.2.1
Scanning src for .gcda files ...
Found 4 data files in src
Processing src/C####.gcda
ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h
一种可能的方法是限制使用覆盖标志(-fprofile-arcs -ftest-coverage)编译哪些文件。如果您不想将 make 文件系统设计为选择性地选择使用测试工具构建哪些文件,那么以下技巧可能适合您:
- 无需仪器即可构建您的应用程序。
- 删除要检测的源的 .o 文件
- 打开仪器并重建。只有删除的目标文件才会通过检测重建。
- 运行lcov
这应该会导致仅目标区域发出 gcov 伪影,这些伪影会被 lcov 脚本盲目消耗。
不隶属于 StackOverflow