当我运行 gcov foo.cpp 时,它不仅会生成 foo.cpp 的代码覆盖率报告,还会生成 foo.cpp 使用的所有 STL 标头。
有没有办法防止这种情况?它似乎忽略了标准库头文件,如<ctime>
.
编辑
刚刚在 gcc 邮件列表上看到了这篇文章:
当我运行 gcov foo.cpp 时,它不仅会生成 foo.cpp 的代码覆盖率报告,还会生成 foo.cpp 使用的所有 STL 标头。
有没有办法防止这种情况?它似乎忽略了标准库头文件,如<ctime>
.
编辑
刚刚在 gcc 邮件列表上看到了这篇文章:
-r --relative-only
仅输出有关具有相对路径名的源文件的信息(在源前缀省略之后)。绝对路径通常是系统头文件,其中任何内联函数的覆盖通常是无趣的。
任何带有内联代码的 C++ 头文件都将在您编译时获得覆盖率检测,结果将在 gcov 中可见。一个有用的标志是gcov -long-file-names
(或只是-l),它为给定文件包含的每个标头创建一个唯一的 .gcov 输出文件。这些文件的名称类似于foo.cpp##bar.h.gcov
. 这将使您以后可以轻松删除它们rm \*\\#\\#\*.gcov
(小心那些反斜杠!)
检测这些文件的另一种方法是在 gcov 输出中查找编号为 0 的行。这些标记信息包括“来源:”以及原始源文件的完整路径。