目前,我们将 gcov 与我们的 Linux C++ 应用程序测试套件一起使用,它在测量线路覆盖率方面做得很好。
gcov 除了线路覆盖率之外还能生成函数/方法覆盖率报告吗?
查看 gcov 接受的参数,我认为这是不可能的,但我可能会遗漏一些东西。或者,可能还有其他工具可以从 gcc 生成的统计信息中生成函数/方法覆盖率报告吗?
更新:函数/方法覆盖率是指在测试期间执行的函数的百分比。
目前,我们将 gcov 与我们的 Linux C++ 应用程序测试套件一起使用,它在测量线路覆盖率方面做得很好。
gcov 除了线路覆盖率之外还能生成函数/方法覆盖率报告吗?
查看 gcov 接受的参数,我认为这是不可能的,但我可能会遗漏一些东西。或者,可能还有其他工具可以从 gcc 生成的统计信息中生成函数/方法覆盖率报告吗?
更新:函数/方法覆盖率是指在测试期间执行的函数的百分比。
我猜你的意思是 -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
我们已经开始一起使用 gcov 和lcov。lcov 的结果确实包括为您正在查看的“模块”执行的函数的百分比。
编辑:模块可以从目录到文件。
我还想补充一点,如果您已经在使用 GNU 编译器工具,那么 gcov/lcov 对您来说运行起来不会太难,并且它产生的结果非常令人印象深刻。
lcov 实用程序很好,我们使用它。但我不确定你是否需要它来满足你的需求。
我们
使用 ctags ( wikipedia ; sourceforge ) 查找相关头文件中声明的所有函数。
运行 GCOV 以获取二进制文件中每个函数的行覆盖率。
比较 1 和 2 中的函数列表以生成“调用的函数”/“可用的函数”。
我们称其为“API 覆盖率”,因为我们仅将第 1 步应用于公共 API 标头。但是您可以根据自己的选择对所有标题或仅在子集上执行此操作。我认为我们以这种方式产生的比率就是您正在寻找的比率。