gcov的覆盖率为0,但单元测试运行良好
我为一个代码编写了大约8个单元测试,其中一些代码的gcov覆盖率与单元测试覆盖率一致(显示所有的块都已执行,等等)。对于其余部分,gcov如下所示:gcov的覆盖率为0,但单元测试运行良好,c,gcov,C,Gcov,我为一个代码编写了大约8个单元测试,其中一些代码的gcov覆盖率与单元测试覆盖率一致(显示所有的块都已执行,等等)。对于其余部分,gcov如下所示: function XXX called 0 returned 0% blocks executed 0% unittestresults.out: gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest1 -g unittest1.c dominion.o rn
function XXX called 0 returned 0% blocks executed 0%
unittestresults.out:
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest1 -g unittest1.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest2 -g unittest2.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest3 -g unittest3.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest4 -g unittest4.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest1 -g cardtest1.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest2 -g cardtest2.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest3 -g cardtest3.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest4 -g cardtest4.c dominion.o rngs.o
./unittest1 &> unittestresult.out
./unittest2 >> unittestresult.out
./unittest3 >> unittestresult.out
./unittest4 >> unittestresult.out
./cardtest1 >> unittestresult.out
./cardtest2 >> unittestresult.out
./cardtest3 >> unittestresult.out
./cardtest4 >> unittestresult.out
gcov -b dominion.c >> unittestresult.out
cat dominion.c.gcov >> unittestresult.out
但是我的单元测试看起来是这样的:
Lines executed:80.00% of 10
Branches executed:100.00% of 8
Taken at least once:75.00% of 8
No calls
我很困惑,因为它显示函数中的一些行被执行了,但gcov告诉我不是这样。有人知道我做错了什么吗?
谢谢大家! 为了更详细地描述这个问题,如果其他人遇到同样的问题,我正在运行单元测试,我知道单元测试很好,而且一切似乎都很好,但不知何故,我得到了0覆盖率 结果是我的makefile做了一些有趣的事情。我的makefile中有这样一个块:
function XXX called 0 returned 0% blocks executed 0%
unittestresults.out:
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest1 -g unittest1.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest2 -g unittest2.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest3 -g unittest3.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o unittest4 -g unittest4.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest1 -g cardtest1.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest2 -g cardtest2.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest3 -g cardtest3.c dominion.o rngs.o
gcc -fprofile-arcs -ftest-coverage -Wall -lm -std=c99 -o cardtest4 -g cardtest4.c dominion.o rngs.o
./unittest1 &> unittestresult.out
./unittest2 >> unittestresult.out
./unittest3 >> unittestresult.out
./unittest4 >> unittestresult.out
./cardtest1 >> unittestresult.out
./cardtest2 >> unittestresult.out
./cardtest3 >> unittestresult.out
./cardtest4 >> unittestresult.out
gcov -b dominion.c >> unittestresult.out
cat dominion.c.gcov >> unittestresult.out
最后我把第一行改成了这个和那个,把一切都搞定了。使用相同的单元测试,我现在获得了覆盖率:
unittestresults.out: unittest1.c unittest2.c unittest3.c unittest4.c cardtest1.c cardtest2.c cardtest3.c cardtest4.c dominion.o rngs.o