有没有办法将lcov代码覆盖率报告集中到一个或两个目录?

时间:2009-05-08 00:03:42

标签: code-coverage gcov lcov

我最近开始使用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”目录的覆盖文件。)

但是,这似乎不起作用。该报告仍然显示了所有无关的文件。任何建议都非常感谢。谢谢!

3 个答案:

答案 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文件系统以选择使用测试工具构建哪些文件,则以下技巧可能对您有用:

  • 无需工具即可构建您的应用程序。
  • 删除要修改的源的.o文件
  • 启用仪器并重建。仅使用检测重建已删除的目标文件。
  • 运行lcov

这应该导致只有目标区域发出gcov工件,这些工件是由lcov脚本盲目使用的。