c++ 如何获取包含的C/CPP文件的gcov结果

kcrjzv8t  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(202)

我试图在一个通过#include导入的文件上得到gcov结果。如果我把它作为一个单独的目标文件编译,它就可以正常工作。例如,对于这些文件:
lib.h

int addFive(int num);

lib.c

#include "lib.h"
int addFive(int num)
{
   return num + 5;
}

testlib.cpp

#include "lib.h"
int main()
{
   return addFive(2);
}

如果我这样编译:

g++ -c -fprofile-arcs -ftest-coverage lib.c -o lib.o
g++ -c testlib.cpp -o testlib.o
g++ lib.o testlib.o -lgcov -o testlib

那么我将得到一个gcda文件,如预期的那样:

[~]$ strings testlib | grep gcda
/home/user/lib.gcda
[~]$

但如果我尝试在包含如下所示的.c文件时执行此操作
test.cpp

#include "lib.c"
int main()
{
   return addFive(2);
}

然后编译

g++ test.cpp -lgcov -o test

然后我就不按预期得到gcda了:

[~]$ strings test | grep gcda
[~]$

当包含C文件时,有没有办法让gcda显示出来?这同样适用于包含. cpp。

6kkfgxo0

6kkfgxo01#

如果我用--coverage而不是-lgcov编译测试,它会生成一个test.gcda
但是如果我同时运行testlibtest,然后对所有文件一起使用gcov,它会正确地组合覆盖率数据:
gcov lib.gcda lib.gcno test.gcda test.gcno
这将生成lib.c.gcov,其中包含来自两个测试运行的代码覆盖率。

相关问题