使用gcov忽略或排除外部库中的代码

时间:2015-10-19 15:02:09

标签: c++ gcov boost-range

我正在开发一个使用几个boost库的项目。在查看我们的测试报告时,我们已经看到测试覆盖率信息有时适合我们的源代码。我能够追踪它以提升::范围。我认为这是因为库内部有一些静态初始化,虽然我不能说更具体的内容。

基本上,如果使用 var marker = new google.maps.Marker({ position: latlng, map: map, icon: { url: "myurl/mypicture.jpg", scaledSize: new google.maps.Size(40,30) } }); 编译以下代码,运行它并使用gcc --coverage打印覆盖率报告,将有四个额外的分支和一个额外的行,我想忽略。

gcov -b

报道报告是: 执行的行数:5的100.00% 分支执行:4的100.00% 至少拍摄一次:4的50.00% 执行的呼叫:2的100.00% 创建' test_gcov.cpp.gcov'

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

blog post here很好地说明了如何使用该标志(并涵盖了整个lcov过程,从头开始。)