我最近开始使用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”目录的覆盖文件。)
但是,这似乎不起作用。该报告仍然显示了所有无关的文件。任何建议都非常感谢。谢谢!
答案 0 :(得分:30)
我使用--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
答案 1 :(得分:29)
lcov支持命令行参数 - 删除以完全按照您的要求执行。
答案 2 :(得分:2)
一种可能的方法是使用coverage标志(-fprofile-arcs -ftest-coverage)约束编译哪些文件。如果您不希望设计make文件系统以选择使用测试工具构建哪些文件,则以下技巧可能对您有用:
这应该导致只有目标区域发出gcov工件,这些工件是由lcov脚本盲目使用的。