问题标签 [lcov]

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 回答
2192 浏览

gcc - 如何在没有优化的情况下将 gcov 与 gcc 一起使用?

我有一个这样的测试代码:

我添加了编译标志:-fprofile-arcs -ftest-coverage提供覆盖数据。

我写了这样的测试代码:

我使用 lcov 生成了一个 html 报告,它说else分支return (n - 21) * 2已执行,所以我得到了 100% 的行覆盖率。这不是真的

我google了一下,发现就是因为这个——gcc优化可以通过将一些简单的代码行与其他行组合来消除它们,但是如果我不应该使用-fprofile-arcs -ftest-coverage标志,我应该如何生成覆盖数据?

顺便说一句,我正在使用 netbeans 和 cygwin 进行单元测试,我不认为手动调用gcovmakefile 或脚本对我有好处。

仅供参考,我正在使用 lcov,如下所示:

0 投票
1 回答
1292 浏览

code-coverage - lcov 问题生成输出文件

我一直在尝试获取我一直在使用 lcov 运行的一些测试用例的代码覆盖率。

但是,当我跑步时

我收到警告

geninfo:警告:在 .bb 文件中找不到 test.c.gcov 的条目,正在跳过文件!

如果我直接在 test.c 上运行 gcov,我可以生成一个成功显示利用率的 gcov 输出。

我是代码覆盖的新手。我们将不胜感激任何解决此问题的帮助。

0 投票
1 回答
1430 浏览

gcc - gcc 3.23 中缺少 libgcov.a

由于某些原因我必须使用旧版本的 gcc,gcc2.96 或 gcc 3.23 使用相同的,我需要对一些代码执行代码覆盖率分析。

但是,当我尝试使用-lgcov选项执行链接时,我得到

/usr/bin/ld: 找不到 -lgcov

我发现我libgcov.a在 /usr/lib 中没有。但是我的理解是 libgcov 通常在安装 gcc 时自动安装。

任何有关如何解决此问题的建议将不胜感激

0 投票
4 回答
18758 浏览

c++ - 为 lcov 生成分支覆盖率数据

我正在尝试将 lcov 用于代码覆盖率指标,但我无法让分支覆盖率起作用。

这是我使用它的方式:

但我得到:

总体覆盖率:
行......:100.0%(60行中的60行)
功能......:100.0%(26个功能中的26)
分支......:未找到数据

有任何想法吗?

0 投票
1 回答
1551 浏览

c++ - lcov,报告未测试标头的覆盖率为 0%

我会用一个例子来问。让我们假设以下文件:

“test.cpp”包括“yes.h”

当我运行 lcov 时会显示 yes.h 和 test.cpp 中覆盖的百分比,但是(这是我的问题)我想要“not.h”的零覆盖率条目,这样我就可以真正拥有一个有价值的覆盖率指标。有什么办法可以做到这一点?

这是我的lcov用法:

谢谢。

0 投票
1 回答
2357 浏览

code-coverage - 如何在 lcov/genhtml 代码覆盖率输出中包含测试用例描述

我正在使用 lcov 为 C 代码库生成代码覆盖率报告。我想将测试描述集成到最终输出中(使用 lcov 的 gendesc 实用程序。)

但是,我不知道如何做到这一点,而且关于 gendesc 的文档似乎相当稀疏​​(就老谷歌能够告诉我而言)。

LTP的gendesc 信息描述了如何创建输入测试用例描述文件(正如 genhtml 所期望的那样)。并且genhtml 信息提供--show-descriptions, 和--description-file用于输入这样的测试用例描述文件。

但是,我不知道如何引用测试用例以便将它们包含在最终报告中。genhtml 将它们视为未使用的测试用例,因此将它们排除在生成的 html 输出之外。我可以使用--keep-descriptions,但这并不能告诉我运行了哪些测试用例(显然是因为我不知道如何从代码引用到测试描述。)

那么,我们如何告诉 lcov/genhtml 在最终输出中运行了哪些测试?有任何想法吗?

0 投票
1 回答
3008 浏览

c++ - lcov 问题:奇怪的重复构造函数标记为未覆盖和函数未标记为已覆盖,即使它的行已被执行

在我寻求通过启动一个小型 C++ 测试项目并以 100% 的覆盖率运行来了解更多关于自动化测试的信息时,我遇到了以下问题——即使我所有的实际代码行和所有执行分支都被测试覆盖了, lcov 仍然报告两行未经测试(它们只包含函数定义),以及一个“重复”构造函数方法,即使它与我的“真实”构造函数(唯一一个曾经定义和使用过的构造函数)完美匹配,也应该是未经测试的。

(跳至编辑最小复制案例)

如果我使用 gcovr python 脚本生成相同的覆盖率统计信息(来自相同的确切来源,.gcno 和 .gcda 文件)并将结果传递给 Jenkins Cobertura 插件,它在所有方面都给了我 100% - 行、条件和方法.

这就是我的意思:

Jenkins Cobertura 覆盖页面:http://gints.dyndns.info/heap_std_gcovr_jenkins_cobertura.html(一切都是 100%)。

使用 lcov 处理的相同 .gcda 文件:http://gints.dyndns.info/heap_std_lcov.html 两个函数定义行标记为未执行,即使这些函数中的行被完全覆盖,以及函数 Hit = functions Total - 1)。

来自 lcov 的该源文件的函数统计信息:http://gints.dyndns.info/heap_std_lcov_func (显示了两个相同的构造函数定义,都引用文件中的同一行代码,其中一个标记为命中 5 次,另一个0 次)。

如果我查看中间 lcov .info 文件:http://gints.dyndns.info/lcov_coverage_filtered.info.txt我看到那里也有两个构造函数定义,两者都应该在同一行:FN:8 ,_ZN4BBOS8Heap_stdC1Ev & FN:8,_ZN4BBOS8Heap_stdC2Ev。

哦,不要介意 .uic 包含/析构函数周围的混乱,这只是处理gcov 报告的析构函数中的分支是什么的一种肮脏方式?当我拍摄这些文件快照时,我碰巧正在尝试。

有人对如何解决这个问题有建议吗?C++ 编译器在这里做了一些“幕后”魔术吗?(出于特殊目的,我应该确保从我的测试中调用的构造函数的额外副本,也许?)常规函数定义呢?即使主体已经过全面测试,定义行怎么可能未经测试?这仅仅是lcov的问题吗?欢迎提出任何建议 - 我想了解为什么会发生这种情况,以及我的测试是否确实有一些功能未被发现并且 Cobertura 没有抱怨......或者如果没有,我如何让 lcov 理解这一点?

编辑:在下面添加最小的重现场景

lcov_repro_one_bad.cpp:

生成文件:

这是我从中得到的报道: http: //gints.dyndns.info/lcov_repro_bin/lcov_coverage_html/gints/lcov_repro/lcov_repro_one_bad.cpp.gcov.html

如您所见,所谓的未命中行是函数可能抛出的异常的定义,并且 Child 的额外未命中构造函数仍然存在于函数列表中(单击顶部的函数)。

我尝试从函数定义中删除 throw 声明,这会处理函数声明中未执行的行:http: //gints.dyndns.info/lcov_repro_bin/lcov_coverage_html/gints/lcov_repro/lcov_repro_one_v1.cpp。 gcov.html(如您所见,额外的构造函数仍然存在)。

我尝试将函数定义移动到类主体中,而不是稍后定义它们,这样就摆脱了额外的构造函数:http: //gints.dyndns.info/lcov_repro_bin/lcov_coverage_html/gints/lcov_repro/lcov_repro_one_v2.cpp。 gcov.html(不过,Do_stuff 函数定义仍有一些奇怪之处,如您所见)。

然后,当然,如果我同时做上述两个,一切都很好: http: //gints.dyndns.info/lcov_repro_bin/lcov_coverage_html/gints/lcov_repro/lcov_repro_one_ok.cpp.gcov.html

但我仍然不知道这是什么根本原因......而且我仍然希望将我的方法(包括构造函数)定义在一个单独的 .cpp 文件中,而不是在类主体中,我确实想要我的具有明确定义的异常的函数可以抛出!

这是源代码,以防你想玩这个: http: //gints.dyndns.info/lcov_repro_src.zip

有任何想法吗?

谢谢!

0 投票
1 回答
2033 浏览

c++ - gcov/lcov:生成头文件覆盖的问题

lcov 不会为使用相对于项目根目录的路径包含的头文件生成覆盖率数据。

我有以下简化的文件结构:./main/main.cpp:

./bar/bar.hpp:

./生成文件:


当我运行 make cov 时,我收到以下警告:

geninfo: WARNING: no data found for /home/casserso/playground/gcov/./bar/bar.hpp

并且没有为 bar.hpp 生成覆盖数据

如果我在 main.cpp 中将 #include "bar/bar.hpp" 更改为 #include "../bar/bar.hpp" 一切都很好。

有人可以帮我解决这个问题吗

谢谢克里斯蒂安

0 投票
0 回答
6433 浏览

perl - /usr/bin/perl : 符号查找错误;未定义符号:Perl_Istack_sp_ptr

每当我对编译的对象和相应的文件使用lcov命令 (lcov-1.9) 时,都会出现错误。gcc 3.4.gcda

我执行的命令:

错误:

是因为 Perl 出了问题吗?(但是,我们开发服务器上的 Perl 应该没问题。)还是因为 lcov 和 GCC 之间的某些版本不匹配或其他原因?

有什么线索吗?

0 投票
1 回答
468 浏览

linux - 自定义 genhtml 的 HTML 输出

我正在使用 lcov 和 genhtml 进行代码覆盖。genhtml 生成的输出具有 CSS 样式。wxWidgets 2.8.12 中的 HTML 窗口不支持 CSS 样式的 HTML 页面。

是否可以使用 genhtml.html 获得一个普通的 HTML 页面。

问候约翰尼