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