GCOV静态库覆盖了C源代码

我想在静态库上执行代码覆盖。 为此,我使用boost来编写测试用例。 在我的库中,我有许多在头文件中定义的函数。

例如在头文件accuracy.h中,我有以下功能

static float absf( float x )
{
    return (x >= 0.0f) ? x : -x;
}

static boolean almost_zero( float n, float tol )
{
    return (boolean)(absf( n ) <= tol);
}

我已经编写了这些函数的测试用例。 但问题是GCOV显示这些功能没有涵盖。 如果我将函数定义移动到C文件,那么我会得到适当的覆盖结果。

我已经使用-fprofile-arcs -ftest-coverag来执行覆盖。 有没有人有任何想法在这个问题上。

注意:
测试用例正确执行。 我已通过调试进行确认。
我正在使用MinGW gcc版本4.8.1(GCC)。


头文件中的函数难以覆盖。 这不仅仅是一个技术难题 - 这也是一个介绍难点。 每次包含头文件时都会复制这些函数。 全覆盖是否需要覆盖所有副本? 或者一个实例被覆盖?

从用户的角度来看,这两个答案可能都是错误的。

另外,潜在的头文件中可能存在用户不关心的功能。 例如, ctype.h有一些这样的。

这可能是为什么报道工具倾向于完全忽略它们。

我使用的是覆盖工具RapiCover,我们的方法是默认忽略它们,但提供了打开标题覆盖范围的选项。 该选项可以逐个文件地使用,也可以专门命名您想要覆盖的功能。 我们发现这是支持典型客户需求的最佳方式。

我建议你试着强迫gcov相信这些函数是在C源代码而不是头文件中定义的。 为此,请预处理源文件(例如GCC的-E选项),然后过滤出指示文件和行号的#标记。 然后在这个经过预处理的过滤文件上执行gcov 。 它应该将所有功能看作源代码的一部分。 这个技巧也适用于RapiCover,虽然在那里并不需要。

链接地址: http://www.djcxy.com/p/37969.html

上一篇: GCOV static library coverage for C source code

下一篇: Override gcov functions to get executed code lines