我试图在一个通过#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。
1条答案
按热度按时间6kkfgxo01#
如果我用
--coverage
而不是-lgcov
编译测试,它会生成一个test.gcda
。但是如果我同时运行
testlib
和test
,然后对所有文件一起使用gcov,它会正确地组合覆盖率数据:gcov lib.gcda lib.gcno test.gcda test.gcno
这将生成
lib.c.gcov
,其中包含来自两个测试运行的代码覆盖率。