问题标签 [llvm-cov]

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

code-coverage - llvm-cov:未实例化函数的统计信息

我开始llvm-cov为我的项目生成覆盖率统计数据。llvm-cov有几类:线路覆盖、功能覆盖和区域覆盖。但是他们都只考虑实例化的函数,没有实例化的函数被简单地忽略。这样,对于实例化函数百分比较低的文件,很容易获得接近 100% 的覆盖率,这不是我想要的。是否可以llvm-cov考虑甚至未实例化的功能或使其产生单独的覆盖率统计信息?

0 投票
1 回答
1375 浏览

llvm - 如何在 Ubuntu 18.04 上安装 llvm-cov?

我已经尝试安装 clang-9、clang-9-tools、llvm-9 和 llvm-9-tools 以获得程序 llvm-cov。这些软件包似乎都不包含 llvm-cov,这让我想知道哪个软件包包含

如何在 Ubuntu 18.04 上安装最新版本的 llvm-cov?

0 投票
0 回答
235 浏览

swift - llvm-cov 在云 GitLab CI 上运行时无法生成报告

我一直在各种环境llvm-cov report的 Docker 映像 ( ) 中运行以下命令(作为 Swift 工具链的一部分提供)。swift:5.1

当 docker 映像托管在 GitLab 的云 docker 运行器之外的任何机器上时,我会得到预期的代码覆盖率输出:

但是,当运行相同命令的相同 docker 图像由 GitLab 的云运行器托管时:

我确保 Swift 包管理器ls -l在我得到的每个环境(包括 GitLab CI)中正确提供代码覆盖率数据:

LLVM-8 和 LLVM-9 也会发生这种情况(LLVM-7 附带 Swift 5.1)

对于我的生活,我无法弄清楚为什么。

我测试过的环境(都运行 Docker Engine 19+):

相关错误报告:

0 投票
3 回答
1400 浏览

xcode11.4 - 在 Xcode 11.4 上启用代码覆盖时如何解决单元测试崩溃

在启用代码覆盖率时执行所有单元测试后,我们遇到了崩溃。请在下面找到堆栈跟踪

如果启用了代码覆盖,则此崩溃仅在 XCode 11.4 上发生。如果禁用代码覆盖率,它可以正常工作,但我们希望在执行单元测试后进行代码覆盖率。在 Xcode 11.3 中,单元测试在启用代码覆盖的情况下运行良好。任何人都可以让我们知道这个问题的解决方案。提前致谢。

编辑:分辨率

对我们来说,将其中一个依赖项的Macho-O-Type从可重定位对象文件更改为静态库解决了这个问题。但不确定这是否是导致此问题的唯一原因,因为可能有多种原因。

0 投票
1 回答
730 浏览

ios - xcrun llvm-cov 显示:未找到覆盖数据

xcrun llvm-cov show 命令返回错误的可能原因是什么:加载覆盖失败:没有这样的文件或目录?

我有一个 iOS 库。lib 构建的结果是 *.a 二进制文件。我在项目中有一个方案,其中还包含 GTest 单元测试。

所以我执行:

在那之后

最后一个命令给了我

我有 3 个结构相似的模块,其中一个工作正常,另外 2 个给我这个错误。

我真的很感激有人可以提示此错误的可能原因以及尝试的可能解决方案。

0 投票
0 回答
149 浏览

code-coverage - AOSP 本机代码覆盖率 - 未找到覆盖率数据

我正在尝试使用 LLVM 的基于源代码的代码覆盖率为原生 AOSP 供应商应用程序(aarch64)提供代码覆盖率,但Failed to load coverage: No coverage data found在尝试生成报告时我一直在获取。

我通过像这样(Android.mk)传递相关标志来启用覆盖:

构建后(并验证实际通过了正确的标志),我推送并运行应用程序:

一个原始的覆盖文件显然已经生成(到目前为止一切都很好),在拉取它之后,这是我使用覆盖工具处理它的方式:

然后产生所述错误:Failed to load coverage: No coverage data found. 如果我查看生成的数据(例如,通过导出文本输出代替:llvm-profdata merge coverage.raw -o coverage.data --text,那么我可以清楚地看到所有数据都在那里。

现在是奇怪的部分。如果我在 AOSP之外构建完全相同的代码(对于相同的 Android 版本),它会按预期工作,并成功生成报告。我能找到的唯一区别是数据文件中的条目顺序,见下文。

我的测试应用程序只是一个Foobar具有两个方法add(int, int)和的类sub(int, int)add并由main(). 我打印结果以确保调用没有被优化掉。

在 AOSP (Clang/LLVM 8) 之外构建:

内置在 AOSP 树中(Clang/LLVM 10):

我有:

  • 验证编译器、链接器和 LLVM 覆盖工具都来自同一个套件(相同版本),因为我知道覆盖数据可能在不同版本之间不兼容。
  • 浏览编译器和链接标志以查看是否有任何可能导致覆盖检测失败。但是由于正在生成原始文件,我不知道这怎么可能。
  • --arch=aarch64生成报告时添加。
  • 浏览了 和 的可用选项llvm-profdatallvm-cov但没有看到任何可以提供帮助的选项。

为什么要llvm-cov抱怨丢失的覆盖数据,当它明显存在时?

更新 1:我将在 AOSP 内部构建时使用的工具链提升到 AOSP 外部的测试用例中,它仍然可以按预期工作。所以这不是工具链问题。

0 投票
0 回答
69 浏览

c++ - 在 CLion 中,如何查看动态链接共享库的代码覆盖率

我有一个带有两个目标的 CMake 项目,一个可执行文件和一个共享库。

我添加-fprofile-instr-generate -fcoverage-mapping到 CXX_FLAGS 并且两者都被编译并与之链接。但是,在 CLion 的覆盖范围内运行时,我只看到可执行文件的覆盖范围。

我知道 .profraw 文件也包含库,因为我可以通过在命令行中运行自己创建文件,然后在自己使用 llvm-cov 并给出库的路径而不是可执行文件时,我看到了结果.

但我真的很想从 CLion 那里看到它,因为它在那里表现得非常好。

关于如何让 CLion 解析多个目标上的结果而不仅仅是可执行文件的任何想法?

谢谢。

0 投票
0 回答
121 浏览

llvm - 使用 llvm-cov 为所有文件创建零覆盖基线

我正在尝试在 Mac 上使用 clang 的 llvm-cov 制作覆盖率报告。我希望所有检测文件(即我的构建中的所有文件)——不仅仅是我的单元测试触及的文件——都包含在覆盖率报告中。测试完全未触及的任何文件都应标记为 0%。

我过去曾在 Linux 上使用 lcov 来执行此操作。您可以通过运行 run 从 0% 的基线覆盖率开始lcov --capture --initial- 这将创建覆盖率数据文件,其中包含项目的每个检测行的零覆盖率,如此处所述。然后,将此基线与运行测试时生成的覆盖率报告合并。不幸的是,我找不到与此命令等效的llvm-cov.

有谁知道是否可以使用 clang 为整个项目提供 0% 的基线覆盖率?

0 投票
0 回答
70 浏览

c - 告诉 llvm-cov 忽略一个块?

我还没有尝试过 gcov,但我想最终这样的解决方案是可以接受的。

我有一个调用 fork() 的函数。因此,检查其是否 > 0 并执行 dup2 + execvp 的 if 语句永远不会根据覆盖率执行。有没有办法可以说忽略这一块?因为除此之外,模块是 100%。我能想到的唯一方法是将它放在一个单独的 c 文件中并在没有覆盖的情况下构建它,但到目前为止我还不需要它,所以我想避免它

0 投票
0 回答
20 浏览

llvm-cov - 如何全面覆盖交换机?

搜索“[llvm-cov] switch”没有答案。我有几个处理 int 的开关,我正在尝试获得完整的代码覆盖率。但是,似乎 llvm-cov 不喜欢没有默认值的开关,但即使我设置了默认值,它也永远不会被执行。在以下情况下,我如何获得全面覆盖?我正在尝试获得完整的线路和分支覆盖。将开关更改为switch(buf[i]&1)无济于事。我是否被迫使用 if 语句?