获取仅有标头库的有用GCov结果

pas*_*cal 22 c++ gcc gcov

对于我的仅标题C++库(许多模板等),我使用GCov来检查测试覆盖率.但是,它会报告所有标头的100%覆盖率,因为编译器首先不会生成未使用的函数.手动发现未覆盖的功能很容易,但却无法实现持续集成的目的......

如何自动解决这个问题?我应该使用"line hit/LOC"作为我的覆盖率指标,而且再也不会达到100%吗?

Mar*_*tts 15

除了GCC控制内联的通常标志;

--coverage -fno-inline -fno-inline-small-functions -fno-default-inline
Run Code Online (Sandbox Code Playgroud)

您可以在单元测试文件的顶部实例化模板类;

template class std::map<std::string, std::string>;
Run Code Online (Sandbox Code Playgroud)

这将为该模板类中的每个方法生成代码,使覆盖工具完美地工作.

另外,请确保初始化*.gcno文件(因此对于lcov)

lcov -c -i -b ${ROOT} -d . -o Coverage.baseline
<run your tests here>
lcov -c -d . -b ${ROOT} -o Coverage.out
lcov -a Coverage.baseline -a Coverage.out -o Coverage.combined
genhtml Coverage.combined -o HTML
Run Code Online (Sandbox Code Playgroud)