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

时间:2010-06-09 08:45:05

标签: c++ g++ code-coverage gcov

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

有没有办法防止这种情况发生?它似乎忽略了<ctime>等标准库标题。

修改

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

Re: gcc, gcov and STL

2 个答案:

答案 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:'以及原始源文件的完整路径。