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

发布于 2024-09-04 10:56:21 字数 317 浏览 11 评论 0原文

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

有办法防止这种情况吗?它似乎忽略了像 这样的标准库头。

编辑

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

回复:gcc、gcov 和 STL

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:

Re: gcc, gcov and STL

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青衫负雪 2024-09-11 10:56:21

-r --仅相对

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

-r --relative-only

Only output information about source files with a relative pathname (after source prefix elision). Absolute paths are usually system header files and coverage of any inline functions therein is normally uninteresting.

明天过后 2024-09-11 10:56:21

任何带有内联代码的 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 like foo.cpp##bar.h.gcov. This would make them easy for you to delete afterward with rm \*\\#\\#\*.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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文