是否可以使用gcov测量功能覆盖率?

Dim*_*nko 8 c++ unit-testing code-coverage gcov

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

除了线路覆盖之外,gcov能否生成功能/方法覆盖报告?

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

更新:按功能/方法覆盖率,我指的是在测试期间执行的函数的百分比.

Vol*_*lkA 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
Run Code Online (Sandbox Code Playgroud)


Ric*_*den 6

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

编辑:模块可以从目录再往文件.

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


tal*_*ity 5

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

我们

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

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

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

我们将其称为"API覆盖",因为我们仅将步骤#1应用于公共API标头.但是您可以在所有标题上执行此操作,也可以仅在您选择的子集中执 我认为我们以这种方式生产的比例是您正在寻找的比率.