【问题标题】:Is there a way to focus lcov code coverage reports to just one or two directories?有没有办法将 lcov 代码覆盖率报告集中到一个或两个目录?
【发布时间】:2010-10-24 16:06:07
【问题描述】:

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

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

【问题讨论】:

    标签: code-coverage gcov lcov


    【解决方案1】:

    我使用--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
    

    【讨论】:

    • 那是在lcov 1.10,不是吗?
    • 对,1.10中加入的,见:ltp.sourceforge.net/coverage/lcov/changes.php
    • 是的,对于 Ubuntu 用户来说太糟糕了,它还没有在 raringsaucy 的存储库中。我一直在使用--extract 方法,但这会让生活变得更轻松。
    【解决方案2】:

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

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

    这应该只会导致目标区域发出 gcov 伪影,而这些伪影会被 lcov 脚本盲目消耗。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • --extract 选项可能更有用。生成包含所有内容的跟踪文件,然后仅将您关心的目录提取到第二个跟踪文件中。
      • 看看this page,它有一个非常有用的 --remove 使用示例。
      • 你应该提供一个例子。使用--remove 会将源文件留在我们的报告中。使用我们已经阅读的手册页的链接进行搜索。
      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2016-10-07
      • 2019-01-29
      • 2012-10-02
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多