问题标签 [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.
html - 当源文件位于其他目录中时,gcovr 不会创建详细报告
当源文件位于我的根目录的相对位置时,我正在尝试从 gcovr 获取正确的 html 输出。
例如(我会提到 gcovr 工作的两种情况,以及它有问题的地方):
案例:1 - gcovr 工作没有问题 我的根目录的结构如下,在我使用 --html --html-details 从根目录运行 gcovr 之后
所以一切正常,我有 html 通用报告(report.html)以及详细报告(report_myfile.html)。
案例:2 - gcovr 无法正常工作 我的根目录的结构如下,在我使用 --html --html-details 从根目录运行 gcovr 之后)
现在如您所见,gcovr 在 gcovr_report/ 目录中生成“report.C”文件
还创建了带有摘要的一般 html 报告 (report.html),但不是我的源文件 "myfile.c" 的详细报告。当我查看 obj 目录时,它会创建以下文件(如下所示):
当我查看
路径解析如下:
但应该是:
gcovr 命令是:
知道我做错了什么吗?
gcovr - 如果 cpp、gcno 和 gcda 文件不在同一文件夹中,GCovr 会生成 0% 覆盖率报告
我在同一个文件夹中有两个文件夹,如下所示:-
1.src(它包含我的 cpp 文件)
2.linux(我正在运行 g++ 并执行 o 文件)
现在我正在运行如下命令
我得到了输出,覆盖率为 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”文件夹,如下命令运行
我得到了有效覆盖的输出
/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”文件夹。我尝试了--object-directory
同样的结果。
code-coverage - Xcode 7 生成 GCOV
所以 Xcode 7 中的热门新特性是集成在 XCode 中的代码覆盖 - 耶!有了这个新功能,Apple 的新代码覆盖格式也随之而来.profdata
。
我们需要在 Cobertura 报告(在 Jenkins 中加载)中显示代码覆盖率报告。目前没有办法转换.profdata
为 Cobertura XML 报告(不过它正在开发中)。
在那之前,我们需要依赖“旧”的 gcov。由于某些未知原因,XCode 7 生成 .gcno 和 .gcda,但是当您gcovr
创建 Cobertura 报告时,它显示所有文件的覆盖率为 0%(我们肯定有一些覆盖率)。
我们尝试回到 XCode 6.4,生成的 gcov 文件在运行时显示正确的覆盖率gcovr
。
有没有人遇到同样的问题?任何可能的解决方案?
c++ - 操作系统的 Gcov/代码覆盖率
我有一个基于 Fendora 的自定义操作系统(即称之为“CustomOS”)。它与 Fendora 相同,只是它具有自定义内核和安装在其上的一些特殊工具。
自定义 OS 映像在 fendora 机器(机器 A)上编译/构建,并加载到不同的(机器 B)上
我想在“CustomOS”(机器 B)上运行基本的文件系统测试,并为这些测试生成 GCOV/代码覆盖率数据。
鉴于操作系统是在不同的机器(机器 A)上编译的,是否可以为机器 B 生成 Gcov/代码覆盖率?
如果是这样,有人可以解释我该如何去做吗?
谢谢你的帮助
c - 使用 gcovr Linux 和 perl 的自动覆盖测试 C 程序
我想测试 2 个 C 程序来检查它的覆盖率(行覆盖率和分支覆盖率)。
我在 linux 系统中使用 gcovr。
为此,我编写了一个 Perl 脚本,它将调用 gcc
编译器并从文件中读取输入,然后测试 C 程序的覆盖率。
我有许多以文件形式提供给 C 程序的测试套件,我使用 Perl 来自动化输入并使用gcovr
.
当然,我 system
在 perl 中使用过 command 和 backtics 来调用gcc
和gcovr
.
第一个 C 程序运行良好,因为程序的输入是从给定的参数中读取的。
但是对于第二个 C 程序,我感到困惑,因为该程序只接受来自键盘的输入,或者简单地说“它正在使用scanf
”。
scanf
那么,我们如何通过终端 linux 或使用 perl命令向仅接受键盘输入的 C 程序提供输入system
?
code-coverage - 获取文件中的 C 代码行
我们正在使用 gcov 和 gcovr.py 来获取测试的覆盖率报告。并非所有源文件都经过测试,因此 gcovr 报告中未提及这些源文件。不过,现在我想计算整个代码库的整体覆盖率。
从报告中我可以得到覆盖的行,但我还需要在那些未测试的文件中获取 C 代码行的数量。在代码目录内的文件中获取 C 代码行的可能性是什么?
code-coverage - 如何验证 .c 文件是否具有相应的 gcno 或 gcda 文件
我有一个疑问。有什么方法可以验证 .c 文件是否生成了相应的 .gcno 和 .gcda 文件。例如 :
我有一个 sample.c 文件。现在我生成 .gcno 和 .gcda 文件。再次修改 sample.c 文件,但我没有为修改后的 .c 文件生成最新的 gcda 和 gcno 文件。有什么方法可以验证 sample.c 是否生成了相应的 .gcno 和 gcda 文件?
c++ - gcov 忽略源文件中的行
我正在使用 gcov 来衡量我贡献的 c++ 库的测试覆盖率。出于某种原因,gcov 没有将许多文件中的行识别为可执行文件。在给定文件的 160 多行中,它会说其中 40 行是可执行的。例如:
在这里,gcov 将文件中的几乎所有行都标记为不可执行,但会跟踪第 82 行的 3 次执行:单个右括号。
这对我来说毫无意义,我无法在网上找到有关此问题的任何信息。任何帮助将不胜感激。
windows - 使用 CMake 在构建时查找和移动带有扩展名的文件
我目前正在尝试使用 MinGW 在 Windows 上使用 CMake 中的 Gcov 和 Gcovr。使用正确的标志编译文件就像一个魅力。但是,CLion 使用 Gcov 不理解的源代码外构建。
在 Linux 上,我使用以下内容将所有*.gcda
和复制*.gcno
到CMAKE_SOURCE_DIR
fromCMAKE_BINARY_DIR
子文件夹:
请注意,测试二进制文件在CMAKE_BINARY_DIR
. 这工作得很好,之后我可以用一些额外的标志调用 Gcovr 来获得一份不错的报告。
但是,在 Windows 上我没有xargs
(我已经很惊讶它find
确实有效)。为了使这个 CMake 命令与平台无关,我正在寻找一种方法来让 CMake 在构建期间找到并复制/移动文件(类似于制作目录)。
谁能告诉我这是否可能以及我应该怎么做?当然,我总是可以安装额外的程序或脚本,但我宁愿在 CMake 中解决这个问题,而不必指示所有开发人员安装不同的工具。
gcov - 使用 gcovr 时 LCOV_EXCL_START/STOP 无效
当我将 LCOV_EXCL_START/STOP 标签添加到我的 C++ 代码中时,它似乎对我的 gcovr 报告没有任何影响。
有人知道为什么会这样吗?
我有以下内容:
和
和
但是第 5 行throw 1;
包含在 gcovr 报告中,即使它被排除标记包围: