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

Gcc 对于gcov的输入,.cpp/.gcda/.gcno之间的任何差异,gcc,gcov,Gcc,Gcov,gcov foo.gcda、gcov foo.gcno和gcov foo.cpp之间有什么区别吗 根据,我们必须将源文件foo.cpp与foo.gcda和foo.gcno放在一起,然后使用gcov foo.cpp生成报告 但在CMake项目中,对象文件、gcda和gcno文件与源文件放在不同的文件夹中,如下所示。所以有时候很难找到源文件并移动它们(因为我正在计算Pytorch项目的覆盖率)。然后我试着跳过.cpp,就这么做吧 gcov -i foo.gcda 在CMake文件夹中,有foo.g

gcov foo.gcda
gcov foo.gcno
gcov foo.cpp
之间有什么区别吗

根据,我们必须将源文件
foo.cpp
foo.gcda
foo.gcno
放在一起,然后使用
gcov foo.cpp
生成报告

但在CMake项目中,对象文件、
gcda
gcno
文件与源文件放在不同的文件夹中,如下所示。所以有时候很难找到源文件并移动它们(因为我正在计算Pytorch项目的覆盖率)。然后我试着跳过
.cpp
,就这么做吧

gcov -i foo.gcda

在CMake文件夹中,有
foo.gcda
foo.gcno
foo.o
。结果也显示了出来。我想知道这个结果是否也正确,或者我是否必须将相应的
foo.cpp
复制到此文件夹,并按照官方文档的建议执行?

运行此
gcov-I foo.gcda
时,您将得到一个仅包含覆盖范围的输出

例如:- 执行的文件'foo.c'行:创建'foo.c.gcov'的14行中的92.86%

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

gcov-foo.gcda将失败,因为
无法打开源文件foo.c

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