使用gcov能够测量函数覆盖率吗?

11

目前,我们在Linux C++应用程序的测试套件中使用gcov,它能很好地测量代码行覆盖率。

除了行覆盖率报告外,gcov是否能生成函数/方法覆盖率报告?

通过查看gcov接受的参数,我不认为这是可能的,但我可能遗漏了什么。或者,可能有其他工具可以从gcc生成的统计数据中产生函数/方法覆盖率报告吗?

更新:我的意思是函数/方法覆盖率,即在测试期间执行的函数百分比。

3个回答

7
我们已经开始同时使用gcov和lcov。lcov的结果包括你正在查看的"模块"中执行的函数百分比。 编辑:模块可以从目录到文件进行选择。
我还想补充一点,如果你已经在使用GNU编译器工具,那么运行gcov/lcov不会太困难,并且它所产生的结果非常令人印象深刻。

6
我猜你指的是-f选项,它可以给出每个函数覆盖的行数百分比。这里有一篇关于gcov的有趣文章,可能会有所帮助:Dr. Dobb's。如果“man gcov”没有显示-f标志,请检查您是否有一个相当新的gcc套件版本。
编辑:要获取未执行函数的百分比,您可以简单地解析函数覆盖率输出,因为0.00%的覆盖率几乎等同于未调用。此小脚本打印未执行函数的百分比:
#!/bin/bash

if test -z "$1"
then
    echo "First argument must be function coverage file"
else
    notExecuted=`cat $1 | grep "^0.00%" | wc -l`
    executed=`cat $1 | grep -v "^0.00%" | wc -l`

    percentage=$(echo "scale=2; $notExecuted / ($notExecuted + $executed) * 100" |bc)

    echo $percentage
fi

“-f”选项并不完全符合我的要求。它按函数给出了行覆盖率,但我想要函数/方法的覆盖率。我已经在问题中添加了澄清。 - Dima Malenko
文章已经消失了,正确的链接是“https://www.drdobbs.com/code-coverage-for-c-unit-tests/184401989?queryText=gcov”,但文章没有显示。DDJ已经停刊了。这里有一篇较新的文章:https://medium.com/@naveen.maltesh/generating-code-coverage-report-using-gnu-gcov-lcov-ee54a4de3f11 - user5248982

5

lcov工具很好用,我们也在使用它。但我不确定你是否需要它来满足你的需求。

我们:

  1. 使用ctags (维基百科; sourceforge) 查找相关头文件中声明的所有函数。

  2. 运行GCOV,以获取二进制文件中每个函数的代码覆盖率。

  3. 比较步骤1和步骤2中的函数列表,生成“可调用函数” / “可用函数”。

我们称之为“API覆盖率”,因为我们只对公共API头文件应用步骤#1。但您可以选择在所有头文件或仅在子集上执行此操作。我认为我们以这种方式生成的比率就是您要寻找的比率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接