7

我正在开发一个使用几个 boost 库的项目。在查看我们的测试报告时,我们发现测试覆盖率信息有时确实适合我们的源代码。我能够追踪到 boost::range。我认为这是因为库中的一些静态初始化,尽管我不能说更具体的东西。

基本上,如果你用 编译下面的代码gcc --coverage,运行它并用 打印覆盖率报告gcov -b,将会有四个额外的分支和一个额外的行,我想忽略它们。

#include <boost/range.hpp>

int foo(int x)
{
    return x+1;
}

int main(int argc, char* argv[])
{
    return foo(argc);
}

覆盖率报告是: 执行的行:5 个分支的 100.00% 执行的分支:4 个的 100.00% 至少执行一次:4 个执行的调用的 50.00%:2 个的 100.00% 创建 'test_gcov.cpp.gcov'

我猜想 5 行的计数来自 boost::range 库中的两个函数签名、函数体和另外一行。我不知道具体在哪里,但是生成的 gcov 文件显示正在进行一些静态初始化,所以我猜那是分支所在的位置。

我想知道是否有办法告诉 gcov 忽略 boost 命名空间中的任何代码,或任何其他方式。

4

1 回答 1

5

您可以使用--removeor-r标志来忽略来自外部库的文件。例如:

lcov -c -d <build_dir> -o <output_trace_file>
lcov -r <output_trace_file> "/usr*" -o <output_trace_file>

您可以用"/usr*"您要删除的任何模式替换。

此处的博客文章给出了如何使用该标志的一个很好的示例(并涵盖了整个lcov过程,从开始到结束。)

于 2018-12-13T19:23:36.923 回答