对于gcov的输入,.cpp / .gcda / .gcno之间的任何差异

问题描述

gcov foo.gcdagcov foo.gcnogcov foo.cpp之间有区别吗?

根据official guide,我们必须将源文件foo.cppfoo.gcdafoo.gcno放在一起,然后使用gcov foo.cpp来生成报告。 / p>

但是在CMake项目中,目标文件gcdagcno与源文件放在一个不同的文件夹中,如Question所示。因此,有时候很难找到源文件并移动它们(因为我正在计算 Pytorch项目的覆盖率)。然后,我尝试跳过.cpp,只是

gcov -i foo.gcda
CMake文件夹中的

,其中有foo.gcdafoo.gcnofoo.o。结果也显示出来。我想知道这个结果是否正确,还是我必须将相应的foo.cpp复制到此文件夹并按照官方文档的建议进行操作?

解决方法

运行此gcov -i foo.gcda时,将仅获得覆盖范围的输出。

例如: File 'foo.c' Lines executed:92.86% of 14 Creating 'foo.c.gcov'

您获得的覆盖率是完全正确的。唯一的区别是,当您不将源文件放在相同的目录命令中时:

gcov -a foo.gcda将失败,并显示Cannot open source file foo.c

这是因为使用-a标志,您可以获得每个基本块的单独执行计数,并且输出包含源代码以及每行执行的次数。如果只希望将coverage作为输出获取,则可以正常工作,但是如果您希望使用lcov之类的工具基于HTML的输出,那么该方法将不起作用,因为您将无法获取源代码。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...