10

目前,我们将 gcov 与我们的 Linux C++ 应用程序测试套件一起使用,它在测量线路覆盖率方面做得很好。

gcov 除了线路覆盖率之外还能生成函数/方法覆盖率报告吗?

查看 gcov 接受的参数,我认为这是不可能的,但我可能会遗漏一些东西。或者,可能还有其他工具可以从 gcc 生成的统计信息中生成函数/方法覆盖率报告吗?

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

4

3 回答 3

6

我猜你的意思是 -f 选项,它会给你每个函数覆盖的行的百分比。Dobb 博士的一篇关于 gcov 的有趣文章可能会有所帮助。如果“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
于 2009-02-10T21:20:59.013 回答
6

我们已经开始一起使用 gcov 和lcov。lcov 的结果确实包括为您正在查看的“模块”执行的函数的百分比。

编辑:模块可以从目录到文件。

我还想补充一点,如果您已经在使用 GNU 编译器工具,那么 gcov/lcov 对您来说运行起来不会太难,并且它产生的结果非常令人印象深刻。

于 2009-02-11T10:13:51.790 回答
5

lcov 实用程序很好,我们使用它。但我不确定你是否需要它来满足你的需求。

我们

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

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

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

我们称其为“API 覆盖率”,因为我们仅将第 1 步应用于公共 API 标头。但是您可以根据自己的选择对所有标题或仅在子集上执行此操作。我认为我们以这种方式产生的比率就是您正在寻找的比率。

于 2009-11-18T19:17:27.117 回答