标签: gcovr

是否可以将两个可执行文件的覆盖率数据与gcov/gcovr合并?

在一个项目中,我在三个不同的可执行文件上运行测试用例,使用不同的选项进行编译.根据选项,可以使用或不使用某些代码路径.现在,我只使用一个可执行文件的覆盖数据.

我正在使用gcovr生成一个XML,然后由Sonar解析:

gcovr -x -b -r . --object-directory=debug/test > coverage_report.xml
Run Code Online (Sandbox Code Playgroud)

我有三套gcda和gcno文件,但我不知道如何生成它们的全局报告.

有没有办法做到这一点?

code-coverage g++ gcov gcovr

21
推荐指数
1
解决办法
5597
查看次数

Xcode 7生成GCOV

因此,Xcode 7中的热门新功能是集成在XCode中的代码覆盖 - yaaay!这一新功能也带来了Apple的新代码覆盖格式.profdata.

我们需要在Cobertura报告中显示代码覆盖率报告(在Jenkins中加载).目前没有办法转换.profdata为Cobertura XML报告(但它正在路上).

在那之前,我们需要依靠"旧"的gcov.由于某些未知原因,XCode 7生成.gcno和.gcda,但是当您gcovr创建Cobertura报告时,它显示所有文件的0%覆盖率(我们肯定有一些覆盖率).

我们试图回到XCode 6.4,生成的gcov文件在运行时显示正确的覆盖范围gcovr.

有人遇到过同样的问题吗?任何可能的解决方

code-coverage gcov gcovr xcode7

9
推荐指数
1
解决办法
2007
查看次数

无论如何将cobertura coverage xml报告合并在一起?

我有c ++/c应用程序,有很多单元测试.我想得到每个测试的整体覆盖率和个人覆盖率,条件是每个测试只能运行一次.覆盖格式必须是xml(cobertura xml),以便jenkins cobertura插件处理.

到目前为止,我在编译时生成gcno文件,在使用source时生成gcda文件.然后调用gcovr获取xml文件.

我想创建每个单元测试的覆盖范围(从而为每个单元测试创​​建覆盖xml),然后将这些xml文件合并到一个xml文件中.

谢谢!

unit-testing code-coverage cobertura gcovr

9
推荐指数
4
解决办法
6383
查看次数

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
查看次数

GCovr不会生成有效的报告

我想用Cobertura设置我的Jenkins来跟踪代码覆盖率.不幸的是我无法生成有效的xml.

我正在使用:

  • gcovr 2.5-prerelease(r2774)
  • Xcode 4.6.1构建版本4H512

我的项目正确生成代码覆盖文件,但使用gcovr创建的报告没有用.

我用来生成报告的命令是:

gcovr -r /Users/Shared/Jenkins/Home/jobs/CodeCoverage/workspace 
--object-directory /Users/Shared/Jenkins/Home/Library/Developer/Xcode/DerivedData/myProject-aooceqwwovrizceerghqvhflcfty//Build/Intermediates/myProject.build/Development/myProject.build/Objects-normal/x86_64 
--exclude '.*Developer.*' 
--exclude '.*Tests.*' 
--xml
Run Code Online (Sandbox Code Playgroud)

这将创建我的输出:

<?xml version="1.0" ?>
<!DOCTYPE coverage SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>
<coverage branch-rate="0.0" line-rate="0.0" timestamp="1364322914" version="gcovr 2.5-prerelease (r2774)">
<sources>
    <source>
        /Users/Shared/Jenkins/Home/jobs/CodeCoverage/workspace/Project/myProject/
    </source>
</sources>
<packages/>
</coverage>
Run Code Online (Sandbox Code Playgroud)

其他信息:

如果我删除--object-directory和-r然后我从派生数据目录执行命令,则会生成一个有效的报告.此报告可以从cobertura中读取,但不能显示有关源文件的任何详细信息.

code-coverage cobertura objective-c jenkins gcovr

5
推荐指数
1
解决办法
5760
查看次数

使用Cobertura输出Gcov的颜色代码

我在Jenkins上设置了gcov代码覆盖工具.

这工作正常,但我在处理输出颜色代码时遇到了麻烦.每条线的'命中数'是核心,但是当其他线为红色时,某些线是绿色的,我不知道为什么.

示例:

在此输入图像描述

请注意,setYear方法全部为绿色,并且调用了13次(ctor + setDateAAMMJJ中的12次,如屏幕截图所示)

continuous-integration cobertura gcov jenkins gcovr

5
推荐指数
1
解决办法
1700
查看次数

如何将 gcovr 与 current/build/run 目录之外的源文件一起使用?

mkdir -p /tmp/build &&
cd /tmp/build &&
mkdir -p /tmp/src &&
echo "int main(){return 0;}" > /tmp/src/prog.c &&
gcc --coverage -o prog /tmp/src/prog.c &&
./prog &&
gcovr -v -r .
Run Code Online (Sandbox Code Playgroud)

将输出一个空报告。

Scanning directory . for gcda/gcno files...
Found 2 files (and will process 1)
Processing file: /tmp/build/prog.gcda
Running gcov: 'gcov /tmp/build/prog.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /tmp/build' in '/tmp/build'
Finding source file corresponding to a gcov data file
  currdir      /tmp/build
  gcov_fname   #tmp#src#prog.c.gcov
               ['        -', '    0', 'Source', '/tmp/src/prog.c\n']
  source_fname /tmp/build/prog.gcda
  root …
Run Code Online (Sandbox Code Playgroud)

code-coverage gcov gcovr

4
推荐指数
1
解决办法
8181
查看次数

gcov 的排除标记

我正在使用 gcov 来测量我的 C++ 代码中的覆盖率。我希望能够标记某些源代码行,以便在使用 gcovr 时将它们排除在覆盖率报告之外。我知道它们存在,因为我曾经偶然发现过它们,但现在我找不到在哪里看到它们了。

我没有使用 lcov 来报告覆盖率,所以对这些标记的引用对我没有好处。

谁能指出我正确的地方?

c++ code-coverage gcov gcovr

3
推荐指数
1
解决办法
2348
查看次数

如何忽略 gcov 输出中的头文件?

我正在使用 gcov 和 gcovr 来生成我的代码测试覆盖率(测试是用 google test++ 完成的)。因此,我使用 -ftest-coverage -fprofile-arcs 选项进行编译,然后运行 ​​gcovr(它本身运行 gcov)。但是,在我的输出中,我有 cpp 文件,覆盖率为 100%,还有 .h 文件,即使它们没有可执行代码,因此它们的覆盖率为 0%。

这个 0% 没有任何意义,因此,我想从覆盖率输出中删除 .h 文件。我找不到任何关于它的东西...

我已经尝试添加: -e "*.h" 到 govr 选项,以排除扩展名为 .h 的文件,但它不起作用(它实际上排除了所有内容......)。

有人有想法吗?

谢谢 !!

c++ continuous-integration code-coverage gcov gcovr

3
推荐指数
1
解决办法
7877
查看次数

GCovr 生成 0% 覆盖率报告,如果 cpp、gcno 和 gcda 文件不在同一文件夹中

我在同一个文件夹中有两个文件夹,如下所示:-
1.src(它包含我的 cpp 文件)
2.linux(我在其中运行 g++ 并执行 o 文件)
现在我正在运行如下命令

cd linux
g++ --coverage ../src/example1.cpp -o example1
./example1
cd ..
/opt/gcovr-3.2//scripts/gcovr -v -r .
Run Code Online (Sandbox Code Playgroud)

我得到的输出为,覆盖率为 0%

扫描目录。对于 gcda/gcno 文件...
找到 2 个文件(并将处理 1 个)正在
运行 gcov:'gcov /opt/gcovr-3.2/doc/examples/example1/linux/example1.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /opt/gcovr-3.2/doc/examples/example1/linux' in '/opt/gcovr-3.2/doc/examples/example1/linux'
解析文件/opt/的覆盖数据gcovr-3.2/doc/examples/src/example1.cpp
过滤文件 /opt/gcovr-3.2/doc/examples/src/example1.cpp 的
覆盖数据 收集了 0 个文件的覆盖数据

为了进一步调试,我转到“linux”文件夹,按照以下命令运行

gcov /opt/gcovr-3.2/doc/examples/example1/linux/example1.gcno --branch-counts --branch-probabilities --preserve-paths --object-directory /opt/gcovr-3.2/doc/examples/example1/linux
Run Code Online (Sandbox Code Playgroud)

我得到输出为,有效覆盖

/opt/gcovr-3.2/doc/examples/example1/linux
文件 '../src/example1.cpp'
执行的行数:7 个
分支的85.71%执行:2 个的 100.00%
至少执行一次:2 个
调用的50.00% :100.00% of 1
../src/example1.cpp:creating '..#src#example1.cpp.gcov'

现在我想知道我做错了什么?我的项目很复杂,所以我不想将所有 cpp 文件从相应的“src”文件夹复制到相应的“linux”文件夹。我尝试了 …

gcovr

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

gcovr 排除问题

我在一个非源构建上运行 gcovr (3.3),例如:

gcovr --root=/path/to/source --object-directory=/path/to/build

现在我想从报告中排除两个不同的内容:

1) 任何.cpp名称中包含“Test”的文件

--exclude='.*Test.*' 似乎不起作用

2)目录中的所有源文件(比如/path/to/source/MyModule/

--exclude='/path/to/source/MyModule/.*' 似乎不起作用。

--exclude-directories='/path/to/source/MyModule' 似乎也不起作用。

我的问题

a)什么是--exclude-directories因为看起来你(应该)能够排除一个传递给正确正则表达式的目录--exclude

b) 关于为什么--excludes 不能按预期工作的任何建议?也许这些不是正确的正则表达式类型/风格?

c++ code-coverage gcovr

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

为什么 GCOV 声称这条线路没有被覆盖?

我最近升级到了新版本的 gcc/g++/gcov,现在 gcov 的行为很奇怪。新版本声称未涵盖旧版本中涵盖的某些代码行。我设法将我的代码减少到这个最小的示例。

#include <memory>
using namespace std;
struct S {};

int main() {
    unique_ptr<S> s;
    s = make_unique<S>();
}
Run Code Online (Sandbox Code Playgroud)

然后我使用 编译此文件g++ -O0 -Wall -Wextra -Werror --std=c++17 --coverage,运行结果a.out,然后运行gcov

生成的.gcov文件包含:

    -:    0:Runs:1
    -:    1:#include <memory>
    -:    2:using namespace std;
    -:    3:struct S {};
    -:    4:
    1:    5:int main() {
#####:    6:    unique_ptr<S> s;
    1:    7:    s = make_unique<S>();
    1:    8:}
Run Code Online (Sandbox Code Playgroud)

这与 gcov 的旧版本不同,旧版本声称第 6 行被命中了 2 次。

为什么 gcov 认为第 6 行没有被覆盖?难道我做错了什么? …

c++ code-coverage g++ gcov gcovr

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

GCOVR 在 MAC 中给出空结果百分之零

我的文件夹中有 .gcda 和 .gcno 文件,我从中运行以下命令。

$ gcovr -r .

结果如下 在此输入图像描述 如果我在 gcda 文件上运行 gcov,我会得到正确的覆盖率值。

macos code-coverage gcov gcovr

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