标签: gcov

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

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

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

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

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

c++ unit-testing code-coverage gcov

8
推荐指数
3
解决办法
6536
查看次数

iPhone:无法获取模拟器来生成.gcda分析数据文件

我正在尝试使用iPhone模拟器来分析我的代码.我启用了生成测试覆盖率文件仪器程序流程,并将-lgcov添加到链接器标志.根据我读过的所有内容,应该是我在设置方面需要做的所有事情.

更新:生成测试覆盖率文件触发-ftest-coverage标志,仪器程序流触发-fprofile-arcs标志.我检查了构建日志,并在编译时设置它们.

执行程序我可以看到.gcno文件出现在旁边.o build/.build/Debug-iphonesimulator/.build/Objects-normal/i386目录中的编译代码.

但是当我在模拟器中运行应用程序时,我没有出现任何*.gcda文件.

我的理解是这些文件包含来自仪器的数据.但我无法在计算机上的任何地方找到它们.

我知道它们可以生成并出现在*.gcno文件旁边,因为我有一个旧的已删除的构建目录,它有它们.我无法弄清楚我必须做些什么来让它们出现并记录下来.

任何帮助赞赏.

iphone profiling gcov

8
推荐指数
1
解决办法
1910
查看次数

C++使用gcov和lcov问题?

我使用的是ubuntu 10.1,g ++编译器.

我试图将gcov和lcov用于我的C++项目.我设法编译gcov:

g++ -fprofile-arcs -ftest-coverage main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)

没有错误或警告消息.接下来我尝试运行gcov:

gcov main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)

还好.我也尝试运行我的程序:

./a.out
Run Code Online (Sandbox Code Playgroud)

并再次运行gcov,我的主要用户和game.cpp现在显示一些百分比.我想捕获数据,我在终端输入:

lcov --directory /home/projects/Game1/ -c -o application.info
Run Code Online (Sandbox Code Playgroud)

但它给了我这个:

Capturing coverage data from /home/projects/Game1/
geninfo: ERROR: cannot read /home/projects/Game1/!
Run Code Online (Sandbox Code Playgroud)

我在网上搜索,阅读lcov文档,我找不到答案.有人可以帮帮我吗?

另外,我也无法打开main.gcda文件.(我尝试使用文本编辑器打开,它说一些字符编码问题,非常多:UTF-8,Western(ISO-8859-1),Western(ISO-8859) -11)等,但仍然无法打开并读取文件.

请帮帮我..谁?

编辑:

我承认,这是我的错误(我非常抱歉,"home/Projects/Game1",资本为"P".)在验证路径后,我收到了这个新错误:

geninfo: ERROR: /home/Projects/Game1/main.gcno: reached unexpected end of file
Run Code Online (Sandbox Code Playgroud)

c++ gcov lcov

8
推荐指数
1
解决办法
2万
查看次数

如何从这些输出中获取实际的函数名称

我使用升压测试进行单元测试,使用gcov和lcov测量覆盖率.

unfortuanlly genhtml为函数覆盖生成类似的报告:

功能覆盖

我现在想知道函数_ZN7UtilLib11ProgressBarC2EjdRSo究竟是什么.

到目前为止,我无法将此函数与ProgressBar的任何类接口相关联:

class ProgressBar {
 public:
    explicit ProgressBar(
            unsigned int expected_count,
            double updateInterval = 30,
            std::ostream& os = std::cout);

    unsigned int operator+=(unsigned int increment);

    unsigned int operator++();

    unsigned int operator++(int i);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何使用gcov获得更好的函数名称或者如何理解这些函数名称.

该应用程序使用gcc4.7编译,带有以下标志:-g -g -save-temps=obj -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-parameter -O0 -pedantic

c++ gcov

8
推荐指数
1
解决办法
778
查看次数

即使程序中止,如何强制gcov提取数据

我正在使用一个名为KLEE的测试生成工具,它为我的C99-Code创建了大量测试.然后我运行测试并用gcov检查线路覆盖.Gcov似乎在成功完成后在运行结束时更新覆盖数据.

但是,某些测试失败(断言声明不正确),导致程序中止,而gcov不计算此运行中涵盖的行.

有没有办法让gcov刷新任何退出的信息(不仅仅是成功)?

c gcov klee

7
推荐指数
1
解决办法
2961
查看次数

了解gcov文件中的分支

我正在尝试理解gcov工具的输出.没有选项运行它是有道理的,但我想尝试理解分支覆盖选项.不幸的是,很难理解分支机构的作用以及为什么不采用它们.下面是方法的输出(使用最新的LLVM/Clang构建进行编译).

function -[TestCoverageAppDelegate loopThroughArray:] called 5 returned 100% blocks executed 88%
        5:   30:- (NSInteger)loopThroughArray:(NSArray *)array {
        5:   31:    NSInteger i = 0;
       22:   32:    for (NSString *string in array) {
branch  0 taken 0
branch  1 taken 7
        -:   33:        
       22:   34:    }
branch  0 taken 4
branch  1 taken 3
branch  2 taken 0
branch  3 taken 3
        5:   35:    return i;
        -:   36:}
Run Code Online (Sandbox Code Playgroud)

我通过这个运行5次测试,传入nil,一个空数组,一个包含1个对象的数组,一个包含2个对象的数组和一个包含4个对象的数组.我可以猜测,在第一种情况下,分支1意味着"进入循环",但我不知道分支0是什么.在第二种情况下,分支0似乎再次循环,分支1似乎结束循环,分支3继续/退出循环,但我不知道分支2是什么或为什么/什么时候执行它.

如果有人知道如何破译分支信息,或者知道任何有关这一切的详细文档,我会很感激帮助.

xcode objective-c llvm gcov

7
推荐指数
1
解决办法
2964
查看次数

如何在嵌入式代码上进行代码覆盖

我为非POSIX嵌入式系统编写项目,所以我不能使用gcc选项--coverage(我没有读或写).我还能做些什么来产生类似输出的gcov.我有一个输出功能.

embedded code-coverage gcov

7
推荐指数
1
解决办法
7457
查看次数

生成空的.gcda文件

我使用gcov进行代码覆盖分析,使用lcov生成覆盖的图形输出.这适用于已执行目标文件的至少一部分的代码文件.我希望能够跟踪尚未执行的文件.我怀疑这与不为这些文件生成的.gcda文件有关.有没有办法强制生成所有目标文件的.gcda文件,而不管执行情况如何?

gcov lcov

7
推荐指数
1
解决办法
2004
查看次数

gcov忽略源文件中的行

我正在使用gcov来衡量我所贡献的c ++库的测试覆盖率.出于某种原因,gcov没有将许多文件中的行识别为可执行文件.在给定文件中的160行中,它会说其中40行是可执行的.例如:

           -:    0:Source:../evo/NK.h
    -:    0:Graph:test_driver.gcno
    -:    0:Data:test_driver.gcda
    -:    0:Runs:1
    -:    0:Programs:1
    -:    1://  This file is part of Empirical, https://github.com/devosoft/Empirical
    -:    2://  Copyright (C) Michigan State University, 2016.
    -:    3://  Released under the MIT Software license; see doc/LICENSE
    -:    4://
    -:    5://
    -:    6://  This file provides code to build NK-based algorithms.
    -:    7:
    -:    8:#ifndef EMP_EVO_NK_H
    -:    9:#define EMP_EVO_NK_H
    -:   10:
    -:   11:#include <array>
    -:   12:
    -:   13:#include "../tools/BitVector.h"
    -:   14:#include "../tools/const_utils.h"
    -:   15:#include "../tools/Random.h"
    -:   16:#include "../tools/vector.h" …
Run Code Online (Sandbox Code Playgroud)

c++ testing profiling gcov gcovr

7
推荐指数
1
解决办法
449
查看次数

constexpr 构造函数不会显示覆盖率数据

今天我将我的矩阵类重写为constexpr. 我对这个类有 100% 的单元测试覆盖率,但我注意到在将几乎所有函数转换为 constexpr 后,构造函数的一部分在 lcov 中被标记为根本不再被覆盖。

这是只有构造函数的类。

template<typename T, std::size_t m, std::size_t n>
class Matrix
{
static_assert(std::is_arithmetic<T>::value,
                  "Matrix can only be declared with a type where "
                  "std::is_arithmetic is true.");

public:
    constexpr Matrix(
        std::initializer_list<std::initializer_list<T>> matrix_data)
    {
        if (matrix_data.size() != m)
        {
            throw std::invalid_argument("Invalid amount of rows.");
        }

        for (const auto& col : matrix_data)
        {
            if (col.size() != n)
            {
                throw std::invalid_argument("Invalid amount of columns.");
            }
        }


        std::size_t pos_i = 0;
        std::size_t pos_j = 0;

        for (auto …
Run Code Online (Sandbox Code Playgroud)

c++ unit-testing code-coverage gcov lcov

7
推荐指数
1
解决办法
701
查看次数

标签 统计

gcov ×10

c++ ×5

code-coverage ×3

lcov ×3

profiling ×2

unit-testing ×2

c ×1

embedded ×1

gcovr ×1

iphone ×1

klee ×1

llvm ×1

objective-c ×1

testing ×1

xcode ×1