为什么gcov为STL标头创建代码覆盖率数据?

Rob*_*nes 11 c++ code-coverage g++ gcov

当我运行gcov foo.cpp时,它不仅为foo.cpp生成代码覆盖率报告,而且为foo.cpp使用的所有STL头生成.

有办法防止这种情况吗?它似乎忽略了标准的库标题<ctime>.

编辑

刚刚在gcc邮件列表上看过这篇文章:

Re:gcc,gcov和STL

Ste*_*tex 7

-r - 仅限相关

仅输出有关具有相对路径名的源文件的信息(在源前缀elision之后).绝对路径通常是系统头文件,其中任何内联函数的覆盖通常是无趣的.


Ben*_*son 5

任何带有内联代码的 C++ 头文件在编译时都将获得覆盖率检测,并且结果将通过 gcov 可见。一个有用的标志是gcov -long-file-names(或只是 -l),它为给定文件包含的每个标头创建一个唯一的 .gcov 输出文件。这些文件的名称类似于foo.cpp##bar.h.gcov. 这将使您之后可以轻松删除它们rm \*\\#\\#\*.gcov(小心那些反斜杠!)

检测这些文件的另一种方法是在 gcov 输出中查找编号为 0 的行。这些标签信息包括“来源:”以及原始源文件的完整路径。