问题标签 [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 回答
942 浏览

c++ - 从覆盖率报告中删除自动生成的异常代码

让我们从一个最小的工作示例开始:
main.cpp:

我使用以下标志编译此代码:

铿锵声4.0.1
gcc 4.8.5。

我只得到 50% 的代码覆盖率,因为编译器会生成未执行的异常代码,如另一个 stackoverflow 问题中所述。

问题是通过禁用异常-fno-exceptions对我来说不是一个选项。我正在为使用异常编写单元测试的代码,因此禁用所有异常不是一种选择。

为了生成我正在使用的报告gcovr,如果使用 clang++,还 llvm-cov gcov需要对其进行转换。但我不受这些工具的约束,所以如果你有其他工具不显示这种行为,请推荐它们!

基本上我需要一种方法来编译/编写此代码的单元测试,并在启用异常的情况下获得 100% 的分支/条件覆盖。有办法吗?

0 投票
1 回答
795 浏览

python - gcovr:如何使用 Cygwin gcovr 包?

我已经在使用 gcov 来获取代码覆盖率结果。我想使用 gcovr。我已经从 Cygwin 安装了 gcovr 包。

现在,我从未使用过 Python。我很困惑,因为我C:\cygwin\lib\python2.7\site-packages\gcovrinit.py,init.pycinit.pyo文件

根据C:\cygwin\bin我有一个gcovr文件,还有python.exe

python.exe从命令提示符运行,它说Python 2.7.13 (default, Mar 14 2017, 23:27:55) [GCC 5.4.0] on cygwin(这是我必须用于 gcovr 的吗?)

我尝试>>>python2.7 gcovr了上面提到的完整 gcovr 路径,我得到了

SyntaxError:无效的语法

我试过了>>>gcovr,我得到了

回溯(最近一次通话最后):

文件(标准输入);第 1 行,在(模块)

NameError:未定义名称“gcovr”

我浏览了帮助实用程序并查看了所有模块,gcovr就是其中之一。

我见过类似../../../scripts/gcovr -r的用法,但我没有脚本文件夹。

我错过了什么?我应该遵循哪些步骤?

0 投票
1 回答
503 浏览

gcov - gcovr 不会为 Jenkins 上的某些分支生成报告

我们发现,对于我们自动拉入 Jenkins 的一些 Github 分支,gcovr 不会生成任何覆盖率信息。它声称未找到任何文件并返回 0% 的代码覆盖率。

其他分支工作正常。一旦我们将代码拉入 master,gcovr 就可以为相同的代码生成代码覆盖率文件。

0 投票
0 回答
253 浏览

code-coverage - 如果我们只有 .gcov 文件但没有 .gcdo 或 .gcno 文件,如何使用 gcovr 获得 HTML 的覆盖结果

当我们从 Keil 得到覆盖结果时,我们没有得到任何.gcdo .gcno文件,但是在使用之后COVERAGE gcov *,我们得到了每个模块的 .gcov 文件。

在 gcovr 中有-g使用预处理.gcov文件的选项,但我无法获得任何输出。

任何帮助,将不胜感激。

0 投票
1 回答
1165 浏览

python - 如何在 Windows 上使用通过 pip 安装的 Gcovr

所以我按照本指南并设法使用 pip 安装 Gcovr(我已经安装了 Python 和 Anaconda)。我尝试使用gcovr,但这就是我得到的:

gcovr 结果

当我使用pip list时,已经安装了 Gcovr。 点子列表结果

我该如何使用它?

我正在使用 Python 3.5.2 :: Anaconda 4.2.0 64bit 运行 Windows 7 64bit

PS:很抱歉,如果之前已经问过这个问题,但经过几天的搜索,我还没有找到任何解决我问题的方法。

0 投票
1 回答
623 浏览

gcc - 如何获取 Gcov(或 Gcovr)上每次运行的覆盖率信息?

我正在尝试获取每个测试用例的覆盖率信息(以及总覆盖率)。但是由于.gcda每次程序运行时都会合并文件,除非文件被删除/移动,否则这是不可能的。

.gcda为每个新的测试用例执行删除文件的问题是我必须再次重复整个过程才能获得所有测试用例的覆盖率信息。如果我有 2000 个测试用例,我必须运行我的程序 4000 次。

至于移动.gcda文件,我必须合并所有.gcda文件。是否可以将多个 gcda 文件与 Gcov(或 Gcovr,因为我将它用于 XML 输出)合并?

显然lcov 具有合并功能,但 AFAIK 它不支持 xml 输出。

0 投票
1 回答
2651 浏览

gcov - 如何在 Gcovr 上的分支覆盖率上显示真/假条件

我一直在尝试获取我执行的测试用例在分支上采用的条件。例如,这是我从 Gcov 获得的覆盖信息的片段gcov -b(我也使用-i选项来提高可读性):

在检查了一些样本之后,似乎真实条件总是首先写在每个分支信息上。这意味着我可以确定执行的测试用例是采用分支的真部分还是假部分。在这种情况下,测试用例在第 10 行取了分支的错误部分。

现在,这是 Gcovr 生成的 xml--branches以及--xml相同程序和测试用例的片段:

在这里,我无法弄清楚分支的哪一部分被占用了。

我可以使用 Gcovr 上的任何选项吗?

0 投票
2 回答
3340 浏览

c - Gcov 工作,但 Gcovr 不工作

当我运行 gcov 时,输出显示 87% 被覆盖...然后我想使用 gcovr,但它永远不会工作。我尝试从许多目录运行,有很多选项。在某些情况下,我得到了一些文件,但不是我想要查看的文件。

我的项目包含 3 个文件:

  • src\main.c
  • src\makefile
  • tst\test1.c
  • tst\test2.c
  • tst\makefile
  • tst\obj\all目标文件、gcno、gcda 存储在这里...
  • build\build.bat制作项目(windows)

我应该更改目录结构吗?如何查看我应该使用哪个版本的 gcov?我想查看 main.c 的覆盖率,但只获得 test1.c 和 test2.c 的覆盖率,而这些与覆盖率无关!!

在测试文件旁边,我在 C:\compiler 上包含了覆盖范围不需要的目录。

我试过 Python27:

我试过 Python36:

但永远不要覆盖我的被测设备。只有没有 gcovr 的 gcov 有效,所以文件必须正确。

0 投票
1 回答
248 浏览

gcov - 在 GCDA 文件中保留 Gcov 测试名称

在使用 lcov(用于 C++ 开发)对我的产品执行测试覆盖后,我想绘制一个矩阵以在测试名称和它所覆盖的文件之间建立对应关系。
我们的想法是快速查看 1 个测试文件所涵盖的代码。

例如:

xxxx |文件 1 |文件 2 |文件 3 |文件 4 | 文件 5 |
测试 1 | 是 | 否 | 是 | 是 | 是 |
测试 2 | 是 | 否 | 否 | 没有 | 否 |
测试 3 | 是 | 是 | 否 | 否 | 是 |

在我的项目中,我需要运行数千次测试来检查数千个文件的覆盖率,因此矩阵会很大。

不幸的是,GCOV 在设计上似乎不是这样工作的,因为我们将只有一组涵盖整个代码的 gcda 文件,而且看起来不可能确定哪个测试涵盖了代码的哪一部分。

我能想到的唯一解决方案是以下一个:

问题是它会非常长,因为这样做,1 次测试大约需要 5 分钟......我将花费数周时间等待......

任何想法都会受到欢迎。

非常感谢你的帮助。问候,托马斯

0 投票
1 回答
1491 浏览

c - Gcovr --object-directory 选项在 .gcda 文件与 .o 文件位于不同目录时无法正常工作

我想用 gcovr(或 gcov/lcov)分析的程序与编译程序的构建目录一起位于共享文件系统上,并且我有多个工作人员打算并行测试我的程序。为了解决竞争条件问题(工作人员将全部运行我的程序,因此在共享文件系统的同一位置生成名称相同的 gcda 文件),我将 gcda 文件重定向到每个工作人员上的单独目标目录(如描述here),我一直在运行以下命令:

最后一条路径是,在此处search_paths描述。我希望这会查找程序源、.o 文件和gcda 文件。但是,我运行它,我看到 gcovr 正在以这种形式从根目录运行 gcov 命令:/absolute/path/to/root/absolute/path/to/object/dir/absolute/path/to/gcda/dir-v

同样,我希望它以这种形式运行(查看 --object-directory 路径):

它在像后一个命令一样运行时表现正常,但 gcovr 正在运行前者。我只使用 gcovr 而不是 gcov,因为我有一个大型项目(我知道 gcovr 是由 lcov 构建的)。有谁知道它为什么会这样?(这是它应该运行的方式吗?)我怎样才能让它按照我想要的方式运行?提前致谢!