【问题标题】:Is it possible to measure function coverage with gcov?是否可以使用 gcov 测量功能覆盖率?
【发布时间】:2010-10-06 18:13:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ unit-testing code-coverage gcov


    【解决方案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
    

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      我们

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 2012-11-03
        • 2012-05-26
        • 2011-07-05
        • 1970-01-01
        • 2011-08-02
        • 2017-10-09
        • 2017-02-21
        相关资源
        最近更新 更多