为什么 gcov 为 STL 标头创建代码覆盖率数据?
当我运行 gcov foo.cpp 时,它不仅生成 foo.cpp 的代码覆盖率报告,还生成 foo.cpp 使用的所有 STL 标头的代码覆盖率报告。
有办法防止这种情况吗?它似乎忽略了像
这样的标准库头。
编辑
刚刚在 gcc 邮件列表上看到这篇文章:
When I run gcov foo.cpp it not only generates the code coverage report for foo.cpp, but for all the STL headers used by foo.cpp.
Is there a way to prevent this? It seems to ignore standard library headers like <ctime>
.
Edit
Just ran across this post on the gcc mailing list:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
任何带有内联代码的 C++ 头文件在编译时都会获得覆盖率检测,并且结果将通过 gcov 可见。一个有用的标志是 gcov -long-file-names (或只是 -l),它为给定文件包含的每个标头创建一个唯一的 .gcov 输出文件。这些文件的名称类似于
foo.cpp##bar.h.gcov
。这将使您可以轻松地使用rm \*\\#\\#\*.gcov
删除它们(小心那些反斜杠!)检测这些文件的另一种方法是查找gcov 输出中编号为 0 的行。这些标记信息包括“源:”以及原始源文件的完整路径。
Any C++ header files with inline code will get coverage instrumentation when you compile and the results will be visible with gcov. One useful flag is
gcov -long-file-names
(or just -l) which creates a unique .gcov output file for each header included by a given file. The files have names likefoo.cpp##bar.h.gcov
. This would make them easy for you to delete afterward withrm \*\\#\\#\*.gcov
(careful with those backslashes!)Another way you can detect these files is to look for the lines numbered 0 in the gcov output. These have tagged information including 'Source:' with the full path to the original source file.