问题标签 [gcov]

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

gcc - gcov 行数与源代码中的行数不同

gcov 的输出表示没有执行 70 % of 10 的行

但我的代码有超过 10 行..

它不计算大括号,否则声明

请帮忙 ..

0 投票
4 回答
3147 浏览

c++ - gcov 和 switch 语句

我正在使用 switch 语句在一些 C 代码上运行 gcov。我已经编写了测试用例来涵盖通过该 switch 语句的所有可能路径,但它仍然报告 switch 语句中的一个分支未采用,并且在“至少采用一次”统计信息中低于 100%。

下面是一些示例代码来演示:

我用“ gcc temp.c -fprofile-arcs -ftest-coverage”构建,运行“ a”,然后做了“ gcov -b -c temp.c”。输出指示交换机上有八个分支,其中一个(分支 6)未采用。

所有这些分支是什么,我如何获得 100% 的覆盖率?

0 投票
1 回答
1989 浏览

autotools - 'make check' 后 Autotools 自动调用 lcov

我已经成功设置了一个自动工具项目,其中测试使用仪器编译,因此我可以获得测试覆盖率报告。

成功“进行检查”后,我可以通过在源目录中运行 lcov 来获取报告。

我现在面临的问题是我想自动化这一步。我想将此添加到“进行检查”或将其作为单独的目标“进行检查覆盖”。理想情况下,如果覆盖率低于某个百分比,我想解析结果并失败。问题是我根本无法弄清楚如何添加自定义目标。

我得到的最接近的是找到这个示例 autotools 配置,但我看不到在该项目中的哪个位置添加了目标“make lcov”。我只能在 m4/auxdevel.m4 中看到一些配置标志。

有小费吗?

0 投票
2 回答
5108 浏览

c++ - 为什么 gcov 为 STL 标头创建代码覆盖率数据?

当我运行 gcov foo.cpp 时,它不仅会生成 foo.cpp 的代码覆盖率报告,还会生成 foo.cpp 使用的所有 STL 标头。

有没有办法防止这种情况?它似乎忽略了标准库头文件,如<ctime>.

编辑

刚刚在 gcc 邮件列表上看到了这篇文章:

回复:gcc、gcov 和 STL

0 投票
1 回答
243 浏览

objective-c - 如何在已安装的 Cocoa 应用程序上运行 Gcov?

我有一个使用安装程序的 Cocoa 应用程序。我希望能够在代码上运行代码覆盖(在安装之后)。

这不是通常的单元测试场景,其中单个二进制文件将运行一组测试。相反,有问题的测试将在运行时与 UI 和应用程序后端交互,因此我理想情况下希望能够启动应用程序,知道 Gcov 正在对其进行分析,然后针对它运行测试。

有任何想法吗?

更新

感谢 mustISignUp。为了澄清我为什么问这个问题:

我犯的错误是认为对象、.gcno 和 .gcda 文件必须与二进制文件一起安装(从而使安装程序变得困难)。碰巧的是,文件的原始位置与检测代码一起被硬连接到代码中。

我采用的解决方案是在构建机器上压缩代码并将其放在测试机器上的磁盘上。lcov(或只是gcov)可以从那里运行。或者,将在磁盘上创建 .gcda 文件,并且必须将它们复制回包含源代码的机器。

无论哪种方式,源代码都不必在安装和运行时出现,但如果您想将结果恢复为 lcov 样式,则生成的覆盖率计数器文件必须与源代码一致。

0 投票
2 回答
2865 浏览

iphone - 如何在 iPhone 上为 gcov 设置环境变量

我已经克服了在我的 iPhone 项目上设置的所有问题,gcov但现在我得到了以下信息:

有人对我可能做错了什么有任何建议吗?

我最初按照 Google 的说明设置 gcov,可以通过谷歌搜索“UsingCoverStory”找到

更新:好的,让我澄清一下我想要做什么。我有一个我试图自动测试的 iPhone 应用程序。我正在使用UISpec框架来驱动 GUI。我真正要知道的是我的测试实际上覆盖了多少代码。我认为我真的很接近,但我只需要了解如何正确设置环境/编译器变量以适合我的项目。

这是我迄今为止所做的总结。我首先复制了我的构建目标,指定了链接器标志和规定的其他几个选项。(这可以使用 Google 创建的 AppleScript 自动完成。说明和下载可以通过谷歌搜索“UsingCoverStory”找到)无论如何,我已经验证这些设置分配正确。我将我的配置设置为调试,我在 3.1.3 设备上运行它。当我运行应用程序时,它不会在调试器中显示任何特殊内容,直到我退出应用程序。那时我收到一个错误:

我认为这GCOV是试图写出.gcda文件,但我不太确定如何告诉它应该写在哪里。我读到某处GCOV试图重现.gcno文件存储在我的项目文件夹中的目录结构,这很有意义,因为上面的目录是.gcno文件在我的机器上的位置。然而,这是一个问题,因为 iPhone 上不存在该结构,设备也无法创建该结构。

我发现另一个人有同样的问题,他们说他们必须设置一个环境变量。如何在 iPhone SDK 中设置 gcov 进行代码覆盖率分析?

GCOV文档说明了以下内容:

例如,如果目标文件/user/build/foo.o 是用 构建的 ,最终的可执行文件将在目标系统上运行时-fprofile-arcs尝试创建数据文件。/user/build/foo.gcda如果相应的目录不存在并且无法创建它,这将失败。这可以通过例如将环境设置为“GCOV_PREFIX=/target/run”和“GCOV_PREFIX_STRIP=1”来克服。这样的设置将命名数据文件/target/run/build/foo.gcda

我的问题是,如何在 iPhone 上设置这些环境变量?我应该在构建配置中还是在实际代码中执行此操作?

0 投票
1 回答
4207 浏览

c++ - 从 gcov/lcov 覆盖结果中排除某些功能

是否可以从 gcov 覆盖率分析中排除某些函数或代码行。我的代码包含某些用于调试的函数,并且没有作为我的测试套件的一部分来执行。此类功能会降低 gcov 报告的覆盖率。我想从结果中排除这些函数。如果不能通过 gcov,也许可以通过 lcov,但我无法弄清楚。感谢您的帮助。

0 投票
5 回答
12947 浏览

gcc - 使用 gcov,是否可以合并到 .gcda 文件?

我有相同的源文件(C 和 Obj-C)被编译成两个目标:单元测试可执行文件和实际产品(然后进行集成测试)。这两个目标构建在不同的位置,因此目标文件、.gcno 和 .gcda 文件是分开的。并非所有源文件都编译到单元测试中,因此并非所有对象都将存在。所有源文件都编译到产品构建中。

有没有办法结合两组 .gcda 文件来获得单元测试和集成测试的总覆盖率(因为它们在产品构建上运行)?

我正在使用lcov。

Mac OS X 10.6、GCC 4.0

谢谢!

0 投票
0 回答
613 浏览

performance - gcov 将 CPU 固定在 100% 是否正常

我正在一个中型项目上运行 gcov(通过 lcov)。它的 CPU 已经接近 100% 有一段时间了(不知道确切的时间,但超过 30 分钟)。内存没有膨胀。它似乎被困在一项任务上。

gcov 做这种事情正常吗?

编辑

没运气。只需要排除与挂起相关的代码。

0 投票
1 回答
1206 浏览

iphone - iPhone:如何使用 gcov?

我正在尝试在 iPhone Project 上使用 gcov 并按照此处描述的 Apple 说明进行操作,但它不起作用。

当我构建并配置项目时,会为每个目标文件创建 .gcda 文件。但是没有执行的行被记录到 .gcda 文件中。(CoverStory 显示所有覆盖率均为 0%)

我刚刚向模板项目添加了一个简单的类,如下所示。

我分配了这个类并在 application:didFinishLaunchingWithOptions 中调用了 func1,我希望显示 SomeClass 的覆盖率(50% 左右)。

我正在使用 OSX 10.6.4、iPhone SDK 4.0 和 Xcode 3.2.3。需要更多配置吗?请指导。

2010/7/15 更新:

我在@tonclon 给我的链接中尝试了这些提示,但它还没有奏效。在下面的描述中是我尝试过的。

  1. GCC 4.0 编译的 Cocoa 应用程序在“Cocoa”应用程序的项目设置中,

    • 将 GCC_INSTRUMENT_PROGRAM_FLOW_ARCS 设置为 YES
    • 将 GCC_GENERATE_TEST_COVERAGE_FILES 设置为 YES
    • 将其他链接器标志设置为 -lgcov
    • 将 C/C++ 编译器版本设置为 4.0

    它起作用了,.gcda 文件按预期生成了覆盖信息。但是,在带有 SDK 4.0 的 iPhone 项目中,我不能使用相同的配置,因为 gcc 4.0 无法在 SDK 4.0 中编译某些语法(例如 Blocks)

  2. 在 google-tool-box 中使用自定义 gcov 库而不是在 Other Linker Flag 中设置 -lgcov,我尝试了 google-toolbox-for-mac 中包含的自定义 gcov 库,但生成的 .gcda 文件显示覆盖率为 0%。(同样的结果)

你能告诉我下一步我应该做什么吗?任何建议表示赞赏。