问题标签 [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.
c++ - 解析 lcov total.info
我正在解析 total.info 文件,该文件是在我的源代码上运行一些 lcov 命令的结果,以便构建一个在需要时提供覆盖信息的服务。lcov 还提供了一个不错的 html ui 来浏览代码覆盖率。问题是我在服务中的功能覆盖率方面得到的值与 lcov 的 html ui 不同。
我正在计算端到端测试的代码覆盖率,而不是单元测试。
Gcc 版本是 4.8.5 Red Hat
Lcov 版本是 1.14
启动的 lcov 命令按以下顺序排列:
1-time lcov -c -i -d . --rc geninfo_adjust_src_path="{path} => " -o base.info
2-time lcov -c -d . --rc geninfo_adjust_src_path="{path} => " -o test.info
3-time lcov -rc geninfo_adjust_src_path="{path} => " -a base.info -a test.info -o total.info
为了简单起见,这里有来自 total.info 文件的 2 个部分。
在本节中,解析工作正常有 5 个函数
解析问题发生在下面的部分,因为某些函数似乎有重复的 FN 语句(它们都从同一行开始,所以我假设这指的是同一个函数)
在第 116 和 128 行,函数如下:
我的问题是为什么某些函数会出现多次(谁的“FN:{}”从同一行开始)?
c - 为什么 gcov 不涵盖逻辑 && 运算符?
我正在对其进行单元测试的代码是这样的:
我的单元测试用例包括以下内容:
其中 DoIP_LocalIpAddrAssignmentChg 是 if 所在的函数名称,0xFF 表示无效状态,显然不等于所有 3:TCPIP_IPADDR_STATE_ASSIGNED,TCPIP_IPADDR_STATE_ONHOLD,TCPIP_IPADDR_STATE_UNASSIGNED。SoConId的值为12。DOIP_INVALID_16 = 0xFF的值。
所以当我检查我的单元测试报告时,它给出了这个结果: 我的问题是为什么它没有覆盖TCPIP_IPADDR_STATE_UNASSIGNED 的条件,因为我传递的状态值是0xFF,这是无效值。
c++ - 为什么 gcovr 会生成空的覆盖率统计信息?
我对如何使用感到困惑gcov
。我有一个 cmake 项目,它有两个使用 googletest 的测试可执行文件。我已将所需的标志添加到我的 cmake 脚本中:
而且我重新编译了我的代码(使用 CLion 和 g++ 10.1)。
现在我切换到构建目录并手动运行两个测试套件。根据文档,这应该生成一些可用于生成覆盖率报告的文件。现在我应该可以跑了
从构建树的根(对吗?),但是输出是这样的:
知道我做错了什么吗?
#Edit 也在运行
有效,但生成一个空报告
gcov - 如何使用 gcovr 工具提高分支覆盖率
我已经使用 C++ 编写了一个示例程序。我已经使用 GUNIT 框架编写了相应的单元测试。我成功地为每个源文件生成了 .gcda 和 .gcno 文件。我在生成 .gcno 文件的文件夹中使用了 (gcov -b -l -p -c *.gcno) 命令。我正在使用 gcov 7.5.0 。当我运行这个命令时,我看到它给了我 a) 覆盖百分比的行 b) 覆盖百分比的分支 c) 至少一次。接下来我运行 (gcovr --html -o Filename.html -r /path_to_C_sourceFiles/ .) 命令为这些数据生成 html 输出。在 html 文件中,我看到分支覆盖数据是从 gcov 生成的至少一次数据中提取的。为什么 html 没有从 gcov 数据中获取分支覆盖百分比并将其显示为分支覆盖率。与分支百分比相比,gcov 工具给出的至少数据是减少的数字。这是什么至少一次?
c++ - gcovr 总是显示 100% 的线路覆盖率
我使用 运行以下代码gcovr
,并获得 100% 的线路覆盖率,尽管bar
没有被调用。我究竟做错了什么?
我使用以下 CMakeLists.txt:
有了这个CodeCoverage.cmake。
我通过调用 编译和运行cmake
,然后调用make run_tests_coverage
.
编辑:在上面的示例中,它似乎bar
不是可执行文件的一部分,尽管-O0
......我修复了这个:
现在我得到了一份正确的覆盖率报告。
现在问题仍然存在 - 如何检查仅标头库的测试覆盖率(无需详细查看报告)?
编辑#2:
c++ - gcovr/SonarQube 说简单的 C++ 函数只覆盖了一半
我们在我们的代码库(FTR)上运行 gcovr,然后输入 SonarQube(cxx-plugin)。有很多地方报告的覆盖率低于 100%,即使没有明显的分支,所以应该肯定是 0 或 100%。举个例子:
在 SonarQube 上,第一行报告为“完全覆盖”。第二行报告为“部分被测试覆盖(2 个条件中的 1 个)”。没有提到第三行 - 正如预期的那样。问题是(我猜)gcovr 在返回线上看到的我不能看到的条件是什么。
我已经尝试过为什么 gcc 4.1 + gcov 报告 100% 分支覆盖率和更新的 (4.4, 4.6, 4.8) 报告 50% 为“p = new class;”的建议 线?(添加--exclude-throw-branches),甚至尝试添加--exclude-unreachable-branches。似乎没什么区别。
查看生成的 xml 输出,我注意到前几行都显示 57 次命中,分支 =“false”。我想知道“两个条件中的一个”来自哪里,也许是 SonarQube?
有没有其他人看到这个或有解决方案?
更新
我一开始没有提到这一点,因为它似乎无关紧要,但我们使用的是 clang v11(不是 gcc),因此在 gcovr 下使用“llvm-cov gcov”(不是 gcov 本身)。如下所示,这似乎很重要。
python - 我需要一些对 gcovr 和 cobertura 的支持
我正在尝试创建一个显示单元测试覆盖率的 pdf 文件。同样我需要推动詹金斯。脚步:
- 我克隆了回购。
- 制作环境并在本地构建。
- 运行 Batchfile 进行单元测试。
并且当我在本地 PC 上运行 gcov 时,我得到了预期的所有 .c 文件的覆盖范围,并且我得到了一个完整的cobertura.xml用于生成 pdf。
这是问题所在:
相同的文件被提交并推送到 jenkins 构建,但我看到单个 .c 文件缺少报告。
尝试调试gcovr.py文件,这里我用
然后,当我打印“输出”时,我看不到a.c.gov
文件创建,我看到其他文件。
当试图分析我在 Jenkins 中发现生成的“coubertura.xml”包不存在时,我认为这是因为没有创建 .gcov 文件。
任何人都可以帮忙吗?
提前致谢。
mingw - 创建 Gcovr 独立版本
我有一个关于 gcovr 的问题。是否可以安装或创建 gcovr 的独立版本。这样用户就不需要安装 python 或 gcovr 了吗?所以我只需要添加路径。(可执行)
谢谢你的帮助
干杯
python - 如何更新/安装 gcovr 以匹配我更新的编译器 gcc
我有 ubuntu 18.04 和 gcc 版本 7。
我使用替代品将 gcc 更新到版本 8,并将我的 gcov 版本从属到 gcc 以保持它们兼容(这在 nicley 中有效),但gcovr
它本身被困在 3.4 版,它需要是 ~ 4.x 版
我进行了一些研究,我认为 gcovr 我只是一个 python 脚本。我安装了 python 2.7,也安装了 python .36。
我尝试使用 pip 安装 gcovr:
这个网站显示了我需要的版本:这里
以下是相关表格:
所以我知道我想要什么以及我需要去哪里,但我不知道如何去那里。我认为我的 pip install 命令调用了 python 2.7 pip(我的 python 知识基本上为零),所以我觉得我需要为 python 3.6 调用 pip 以获得我想要的 gcovr 版本(可能在这里很远)。知道我有各种版本的 python,看起来我的默认版本是 2.7:python --version: 2.7
有什么线索可以让我更新 gcovr(甚至我的 python 版本默认为 3.x)?
更新 1
我得到了一点点。我安装了 python 替代品:
现在我可以在 python 2.x 和 3.x 之间切换。当我将 python 设置为 3.x 并尝试安装 gcovr 时,我得到:
我想我可以下载更新版本的 gcovr 脚本...
c++ - 无法为 arm 工具链找到 GCC 代码覆盖率 libgcov.so
重现问题的步骤
编写 main.cpp
从此链接下载工具链
使用以下命令编译。
- . /opt/poky/1.6/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
- arm-poky-linux-gnueabi-g++ main.cpp -o main --coverage
会出现如下错误。
错误
/opt/poky/1.6.1/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.8.3/ld:找不到-lgcov collect2 : 错误: ld 返回 1 个退出状态
问题陈述
如何为 ARM poky 工具链生成 libgcov.so 文件?
我可以通过安装使用 x86 linux g++ 编译器生成代码覆盖率报告
是否有任何源代码或 git 存储库可以从中为 ARM poky 工具链生成 libgcov.so 文件?或者是否有任何解决方案可以从 ARM poky 工具链中获取程序的覆盖范围?
我已尝试将以下存储库克隆并编译为库,但问题未解决。
如何在 Ubuntu 18.04 上为使用 ARM 工具链(poky 1.6)编写的程序生成代码覆盖率报告文件?