是否可以使用 gcov 测量功能覆盖率?
Posted
技术标签:
【中文标题】是否可以使用 gcov 测量功能覆盖率?【英文标题】:Is it possible to measure function coverage with gcov? 【发布时间】:2010-10-06 18:13:53 【问题描述】:目前,我们将 gcov 与我们的 Linux C++ 应用程序测试套件一起使用,它在测量线路覆盖率方面做得很好。
gcov 除了线路覆盖率之外,还能生成函数/方法覆盖率报告吗?
查看 gcov 接受的参数,我认为这是不可能的,但我可能会遗漏一些东西。或者,可能有没有其他工具可以根据 gcc 生成的统计数据生成函数/方法覆盖率报告?
更新:函数/方法覆盖率是指在测试期间执行的函数的百分比。
【问题讨论】:
【参考方案1】:我猜你的意思是 -f 选项,它会给你每个函数覆盖的行的百分比。 Dr. Dobb's 上有一篇关于 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
【讨论】:
-f 选项并不是我想要的。它按功能提供线路覆盖,但我想要功能/方法覆盖。我对问题进行了澄清。 文章已“消失”,正确的链接是“drdobbs.com/code-coverage-for-c-unit-tests/…”,但文章未显示。 DDJ 死了。这是一篇较新的文章:medium.com/@naveen.maltesh/…【参考方案2】:我们已经开始同时使用 gcov 和lcov。 lcov 的结果确实包括为您正在查看的“模块”执行的函数的百分比。
编辑: 模块 可以从目录到文件。
我还想补充一点,如果您已经在使用 GNU 编译器工具,那么 gcov/lcov 对您来说运行起来不会太难,并且它产生的结果非常令人印象深刻。
【讨论】:
【参考方案3】:lcov 实用程序很好,我们使用它。但我不确定您是否需要它来满足您的需求。
我们
使用 ctags (wikipedia;sourceforge) 查找相关头文件中声明的所有函数。
运行 GCOV 以获取二进制文件中每个函数的行覆盖率。
比较 1 和 2 中的函数列表以生成“调用的函数”/“可用的函数”。
我们将其称为“API 覆盖率”,因为我们仅将第 1 步应用于公共 API 标头。但是您可以根据自己的选择对所有标题或仅在子集上执行此操作。我认为我们以这种方式产生的比率就是您要寻找的比率。
【讨论】:
以上是关于是否可以使用 gcov 测量功能覆盖率?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将来自两个可执行文件的覆盖率数据与 gcov/gcovr 合并?