c - gcov 产生 0 覆盖率,但单元测试运行良好

标签 c gcov

我为代码编写了大约 8 个单元测试,其中一些测试的 gcov 覆盖率与单元测试覆盖率一致(显示所有 block 都已执行,等等)。对于其余的,gcov 看起来像这样:

function XXX called 0 returned 0% blocks executed 0%

但是我的单元测试看起来是这样的:

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 中有这个 block ,如下所示:

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

关于c - gcov 产生 0 覆盖率,但单元测试运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42031899/

相关文章:

c++ - 为什么使用 'gcov' 运行程序时没有生成 'expect' 数据?

在C编程中收集8个字节到char

c - 如何使用 gcov 进行测试覆盖率(使用 perl 脚本测试 C 程序)?

c - 获取Gcov的执行行信息的顺序

macos - Mac 应用程序的 gcov 覆盖率为 0

c - 如何使 printf 从右到左

c - 释放 2 个具有相同地址的指针

c - 仅使用按位运算来除两个整数

c - 我可以在 64 位机器上制作这个结构的最小尺寸是多少?