31

我最近开始使用 lcov 来可视化我的代码覆盖率。这是一个很棒的工具。

我注意到的一件事是,它会为我正在使用的所有文件生成代码覆盖率报告——包括那些我不感兴趣的文件。例如,它会为我提供 boost 和 mysql++ 文件的代码覆盖率报告。

有没有一种简单的方法可以强制 lcov 只为特定文件生成覆盖率报告?

我尝试过使用 -k 参数,如下所示:

/usr/bin/lcov -q -c -i -b 。-d .obj -k src/ -k 包含/ -o app_base.info

{现在运行单元测试}

/usr/bin/lcov -q -c -b 。-d .obj -k src/ -k 包含/ -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”目录的覆盖文件。)

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

4

3 回答 3

34

我将--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
于 2013-02-12T15:19:30.387 回答
32

lcov支持命令行参数--remove以完全按照您的要求进行操作。

于 2009-05-08T02:09:24.983 回答
2

一种可能的方法是使用覆盖标志 (-fprofile-arcs -ftest-coverage) 来限制编译哪些文件。如果您不想设计您的 make 文件系统以选择性地使用测试工具构建哪些文件,那么以下技巧可能对您有用:

  • 无需仪器即可构建您的应用程序。
  • 删除要检测的源的 .o 文件
  • 打开仪器并重建。只有已删除的目标文件将通过检测重建。
  • 运行 lcov

这将导致仅目标区域发出 gcov 伪影,这些伪影被 lcov 脚本盲目消耗。

于 2009-06-16T12:43:46.763 回答