是否可以使用 gcov 来测量函数覆盖率?

发布于 2024-07-14 05:04:09 字数 249 浏览 12 评论 0原文

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

除了行覆盖率之外,gcov 还可以生成函数/方法覆盖率报告吗?

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

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

Currently we use gcov with our testing suite for Linux C++ application and it does a good job at measuring line coverage.

Can gcov produce function/method coverage report in addition to line coverage?

Looking at the parameters gcov accepts I do not think it is possible, but I may be missing something. Or, probably, is there any other tool that can produce function/method coverage report out of statistics generated by gcc?

Update: By function/method coverage I mean percentage of functions that get executed during tests.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

☆獨立☆ 2024-07-21 05:04:09

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

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

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

We have started to use gcov and lcov together. The results from lcov do include the percentage of functions that are executed for the "module" you're looking at.

EDIT: The module can go from directories down to files.

I also want to add that if you are already using the GNU compiler tools, then gcov/lcov won't be too difficult for you to get running and the results it produces are very impressive.

眼眸印温柔 2024-07-21 05:04:09

我猜你的意思是 -f 选项,它会给你每个函数覆盖的行的百分比。 Dr. 有一篇关于 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

I guess what you mean is the -f option, which will give you the percentage of lines covered per function. There is an interesting article about gcov at Dr. Dobb's which might be helpful. If "man gcov" doesn't show the -f flag, check if you have a reasobably recent version of the gcc suite.

Edit: to get the percentage of functions not executed you can simply parse through the function coverage output, as 0.00% coverage should be pretty much equivalent to not called. This small script prints the percentage of functions not executed:

#!/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
献世佛 2024-07-21 05:04:09

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

我们

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

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

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

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

The lcov utility is nice, and we use it. But I'm not sure if you need it for what you want.

We

  1. Use ctags (wikipedia; sourceforge) to find all the functions declared in the relevant header files.

  2. Run GCOV to get line coverage for every function in the binary.

  3. Compare the list of functions from 1 & 2 to produce "Functions Called" / "Functions Available".

We call it "API coverage" since we apply step #1 only to public API headers. But you can do it on all headers or only a subset as you choose. I think the ratio we produce in this manner is the ratio you are looking for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文