问题描述
gcov foo.gcda
,gcov foo.gcno
和gcov foo.cpp
之间有区别吗?
根据official guide,我们必须将源文件foo.cpp
与foo.gcda
和foo.gcno
放在一起,然后使用gcov foo.cpp
来生成报告。 / p>
但是在CMake项目中,目标文件gcda
和gcno
与源文件放在一个不同的文件夹中,如Question所示。因此,有时候很难找到源文件并移动它们(因为我正在计算 Pytorch项目的覆盖率)。然后,我尝试跳过.cpp
,只是
gcov -i foo.gcda
CMake文件夹中的,其中有foo.gcda
,foo.gcno
和foo.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的输出,那么该方法将不起作用,因为您将无法获取源代码。