问题标签 [gcovr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
491 浏览

cmake - 使用 cmake 设置 gcovr-如何在所有静态库上递归获取代码覆盖率

我已经设置 gcovr 来获得我的 c++ 项目的代码覆盖率,这在嵌套静态库的层次结构方面非常复杂。

我尝试的一种方法是在应该计算覆盖率的目标上包含所需的编译选项 ( -fprofile-instr-generate -fcoverage-mapping -fPIC -fprofile-arcs -ftest-coverage) 和链接目标库标志 ( )。-fprofile-instr-generate但这不包括子静态库中的代码。为了解决这个问题,我将标志添加到子静态库中,该库有效,但这不适用于孙辈及以后。

如何正确设置 cMake 以获得所有类的代码覆盖率,而不管它们的库位置如何?

0 投票
0 回答
411 浏览

c++ - gcovr GCOV_EXCL_START 等效于从行覆盖中排除文件

我正在使用 gcovr 来确定我的 C++ 代码的行和分支覆盖率。但是,有些类无法测试(由于对操作系统的依赖性),因此覆盖率为 0。我想从我的报告中排除这些。

我已将 GCOV_EXCL_START(和匹配的 GCOV_EXCL_STOP)注释添加到文件的开头和结尾。这成功地从分支覆盖中排除了注释之间的代码,但 gcovr 仍然报告这些文件的 0 行覆盖。

由于排除标记没有记录(我只是通过stackoverflow某处的评论发现它们),我不知道它们是应该只排除分支覆盖还是应该排除行覆盖。

我希望这里有人可以告诉我:

  1. 为什么这些排除标记没有覆盖线路覆盖范围,如果这是故意的,为什么?
  2. 无论如何,我如何将文件从行覆盖中排除,最好不必在 gcovr 命令中将它们指定为已排除。
0 投票
1 回答
415 浏览

code-coverage - 如何让 gcovr 报告未测试文件的 0%?

我的项目中有许多源文件根本没有经过测试。所以他们有 gcno 文件但没有 gcda 文件。gcovr 只是完全跳过它们,这人为地夸大了我的测试覆盖率报告。我查看了 gcov 和 gcovr 中的各种选项,但我还没有看到任何方法可以为未经测试的文件生成 0% 的覆盖率指标。有没有办法做到这一点?

0 投票
0 回答
333 浏览

gcc - 如何在 CMake 中定义覆盖文件的输出目录

我正在尝试制作一个非常简单的回归模型(除其他外),构建和编译 GCC 目标以进行覆盖,执行,然后发布标准的 Cobertura 覆盖率报告(全部在 Jenkins 内)。Jenkins 部分在这里有些无关紧要,我现在只关心 CMake 语法。到目前为止,这是我的 CMake 文件:

这会在 /test/build/gcc/CMakeFiles/my_project.dir/* 目录中生成我的 *.gcno 和 *.gcda 文件,但为了便于后处理,我想我希望将这些文件放在它们的源代码旁边。那可能吗?如果是这样,怎么做?这是最佳做法吗?当谈到 CMake 时,我仍然很年轻。

0 投票
2 回答
1997 浏览

gcov - 如何让 gcov 和 gcovr 获取源文件和头文件

我正在尝试使用 .bat 文件为项目生成覆盖率报告,如下所述。

  1. 我看到很少的 .gcov 文件。此外,当我单击生成的 html 输出上的链接时,我无法查看文件详细信息(找不到文件错误)。我如何解决它?
  2. 执行 .bat 文件后,我看到类似“解析 QString.h 的覆盖率数据”(QT 库文件)之类的输出。是预期的吗?

我看过很多相关的问题,但我无法弄清楚

以下是详细信息……

使用编译和执行代码

QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage

QMAKE_LFLAGS += --coverage .GCNO 和 .GCDA 文件按预期生成

看起来很简单的目录结构

谢谢你。

更新: 见下面的答案

0 投票
0 回答
150 浏览

c++ - gcovr 在执行与动态链接的分片对象库 (.so) 链接的二进制文件后缺少 .gcda 文件

我正在尝试在我的 linux 项目上使用gcovr,并且在执行二进制文件后无法获得动态库的 .gcda 文件。

我有一个名为projectA的项目,它创建了一个名为libprojectA.so的库,并且单元测试项目链接libprojectA.so。这里的主要目标是我想查看从单元测试二进制文件UnitTestExecutable调用的 projectA 函数的代码覆盖率。

我有这样一个目录结构: 项目结构

这是我调用gcovr的步骤。

  1. 使用其 Makefile 构建 projectA

    • Makefile 有“-fprofile-arcs -ftest-coverage -fPIC”
    • 在 .build 目录中创建 .o 和 .gcno
    • 创建动态库 libprojectA.so
  2. 构建单元测试

    • Makefile 链接 libprojectA.so
    • Makefile 有“-fprofile-arcs -ftest-coverage -fPIC”
    • 创建 .o 和 .gcno
    • 创建二进制 UnitTestExecutable
  3. 执行 UnitTestExecutable

    • 在 /unittest/*.gcda 中创建 .gcda 文件
    • 它不会在 /porjectA/ 文件夹中创建 *.gcda <== 这是问题所在
  4. 调用 gcovr gcovr -v -r /projectA/ --html --html-details -o test-html-details.html --object-directory=/projectA/.build/

    在这里它抱怨它在 /projectA/.build/ 中找不到 *.gcda

有人可以帮忙吗?

谢谢,

0 投票
1 回答
312 浏览

linux - 如何使用 ifdef 代码使用 gcovr 获得 100% 的覆盖率?

我喜欢在我的 Linux 机器上使用 gcovr 来了解测试的内容和未测试的内容。我掉进了一个看不到解决方案的坑里。

我有如下所示的 C 代码(另存为main.c)。代码变得非常简单 - 实际上重点只是#if 构造以及如何针对不同的编译设置进行覆盖分析。

我可以使用例如在 Linux 上编译和进行覆盖测试

这几乎是超级 - 但我想做的是结合测试结果-DPRINTSTYLE=0(见上图)-DPRINTSTYLE=1- 然后我逻辑上应该在生成的 index.main.c.html 中获得 100% 的覆盖率

我完全理解中间需要重新编译。

如何使用 ifdef 代码使用 gcovr 获得 100% 的覆盖率?

0 投票
2 回答
601 浏览

c++ - 如何使用 `if / else if / else` 使用 gcovr 获得 100% 的分支覆盖率

我第一次使用gcovr并且遇到了这个代码的一个令人困惑的问题:

(代码按您的预期工作,所以我不打算粘贴输出。)

但是,gcovr 决定我没有完整的分支覆盖:

显然,四个排列中的一个不是由 处理的else if,而只是因为它已由第一个处理if

我脾气暴躁,因为最终结果是低于 100% 的分支覆盖率。这只是“方式”还是我误会了什么?

0 投票
1 回答
3599 浏览

c++ - 如何使用 gcov 生成覆盖信息的 HTML 报告?

我想生成 C++ 编写的代码覆盖信息结果的 HTML 报告。生成它的命令是什么?我正在使用 File 'c:/mingw/lib/gcc/mingw32/6.3.0/include/c++/iostream' Lines executed:100.00% of 1 Creating 'iostream.gcov'

执行的行数:100.00% of 5

但我无法打开 .gcov 文件

Lcov 是否与生成 html 报告有关?

0 投票
1 回答
2444 浏览

c++ - 将 lcov 结果合并到一份报告中,并保持测试 id 测试每一行

我的每个集成测试都有我的 c++ 代码的 lcov 报告。我想将它合并到一份全球报告中,我知道这是可能的,但它只会增加命中行数。我希望获得有关哪个测试击中每一行的信息。

我不知道是否有办法代替自己编写脚本。

谢谢