问题标签 [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 回答
7352 浏览

llvm - 如何从 llvm-cov 生成 .gcov 文件?

我在 Xcode 7 上创建了一个生成代码覆盖率数据的项目。

在其 DerivedData 文件夹中,我可以运行llvm-cov show

这将产生如下输出:

但是,我想获取.gcov文件,因为这是大多数工具使用的。有没有办法在不解析输出和.gcov手动创建文件的情况下做到这一点?

0 投票
1 回答
703 浏览

c++ - 您如何将 c++filt 与 llvm-cov 报告一起使用?

我正在尝试将 demangler 与 llvm-cov 报告工具一起使用。以下是我正在运行的命令:

我尝试重新排列选项并尝试使用“-Xdemangler=c++filt -Xdemangler=-n”代替,还使用--no-strip-underscore 代替-n。它不会抱怨去解码器,而如果我用命令语法犯了一个明显的错误,它会告诉我,但输出不会被去解码。

来自 llvm-cov 文档:

-Xdemangler=< TOOL >|< TOOL-OPTION > 指定一个符号 demangler。这可用于使报告更具人类可读性。可以多次指定此选项以向 demangler 提供参数(例如 -Xdemangler c++filt -Xdemangler -n for C++)。解码器应该从标准输入读取换行符分隔的符号列表,并将相同长度的换行符分隔列表写入标准输出。

我使用以下方法确保 c++filt 正常工作,并且确实如此:

输出:

我必须使用 -n 选项,否则它不会解散,但我不知道为什么 llvm-cov 似乎没有正确使用它。

我也尝试过使用 shell 脚本来尝试捕获 llvm-cov 提供给去解码器的输入,并在调用 c++filt 之前将其写入文件,但是当我在运行命令后查看时文件为空。

难道我做错了什么?

0 投票
1 回答
3737 浏览

xcode - 如何过滤 llvm-cov 代码覆盖率报告中的文件?

来自llvm-cov 文档

llvm-cov show [options] -instr-profile PROFILE BIN [-object BIN,...] [[-object BIN]] [SOURCES]

llvm-cov show 命令使用配置文件数据 PROFILE 逐行显示二进制文件 BIN、... 的覆盖率。可以选择过滤它以仅显示 SOURCES 中列出的文件的覆盖范围。

我正在使用以下命令:

xcrun llvm-cov show -instr-profile "${PROFDATA}" "${BINARY}" codecov_source_files > Coverage.report

codecov_source_files此行的文件在哪里:

*Router.swift

所以基本上我想要的是报告只包含带有后缀的文件:Router.swift

但是我得到了一个包含项目中所有类的 Coverage.report。

我错过了什么?

0 投票
0 回答
441 浏览

c++ - 如何使用 llvm-cov gcov 查看去杂函数名称?

你好,我使用 clang 编译器和 GTest 框架。我正在尝试查看每个函数中的代码覆盖率,但 llvm-cov gcov 没有显示函数名称 - 只是,难以理解,混乱的名称。如何查看分解的函数名称?Inb4:-m 标志不起作用。

0 投票
1 回答
536 浏览

linux - llvm-cov 和“未知的命令行参数:-format=html”

我使用 llvm 实用程序进行了代码覆盖率测试。之后,我需要做一个 html 封面文件。我使用了命令

然后我收到以下错误:

未知的命令行参数“-format=html”。

我怎样才能解决我的问题?

0 投票
2 回答
1142 浏览

code-coverage - Getting llvm-cov to talk to codecov.io

I'm in the process of (finally!) setting up code coverage monitoring for my brand new C++ project. Due to the fact that I need some advanced C++20 features (read, coroutines), I am using clang 6 as compiler.

Now, I followed this guide on how to do basic code coverage for your project, and everything worked like magic. If I do:

I get a nice, colored report on my terminal that tells me what is covered and what is not.

So far so good! I thought I was close to what I wanted, but then the pain started when I tried to get the report uploaded to codecov.io.

I have tried a few things, including:

  • Running their https://codecov.io/bash script on my coverage folder in the hope that maybe it would catch on my test.profdata. No dice, and it makes sense, since even llvm-cov needs the path to the executable file to run.

  • Using the export functionality: when running llvm-cov export --instr-profile=coverage/test.profdata ./test.out I get a good-looking JSON file (via terminal). I tried throwing the output in a coverage.json file, which actually got uploaded, but then codecov just says that there was an error parsing it, with no further information.

I'm feeling completely lost. Everything seems so black-box-ish on their website that I just don't understand how to get anything done that doesn't by chance perfectly fit the cases that they can manage.

How can I get this working with codecov? If codecov can't handle my reports, is there any other equivalent online code coverage that I can use to get this to work?

0 投票
1 回答
398 浏览

c++ - 多进程覆盖报告

我正在尝试监视我的 C++ 项目的代码覆盖率。正如我在上一个问题中所说,我需要使用协程和其他高级 C++2a 功能,所以我使用clang++它来编译它。我在这里发现,在编译时可以使用该-coverage标志clang++(很明显,使用-O0and -g)。

与可执行文件一起,这会生成一个.gcno文件,其中包含可执行文件的映射。运行可执行文件时,会生成一个附加.gcda文件,其中包含实际的分析数据。

我注意到,如果我多次运行可执行文件,覆盖输出会很好且正确地合并到.gcda文件中,这非常好。

现在,我想知道同时运行多个可执行文件实例是否安全。

在任何人建议按顺序运行测试之前:我顺序运行它们,但我的应用程序使用了大量网络,并且一些测试需要多个实例一起通信(我正在使用 Docker 来模拟网络,并netem得到亲切-不真实的链接场景)。

一起运行同一个可执行文件的多个实例会导致任何问题吗?我可以想象,如果实现了任何锁定机制,覆盖数据将被安全地原子写入.gcda文件,如果其他可执行文件需要执行转储,它们将等到锁被释放。但是,我找不到任何地方可以保证这确实会发生。

0 投票
1 回答
256 浏览

c++ - LLVM 覆盖被 if-constexpr 混淆

在以下位置使用常量表达式时,我遇到了一个关于 LLVM 覆盖率的奇怪问题if-statement

执行的实例化:

在这些中没有一个是sizeof(T) <= sizeof(int)执行的。然而,在第一种情况下,实例化 ( int) 的主体if确实按应有的方式执行。在其他情况下,它显示为已执行。

编译命令行的相关部分:

链接器命令行的相关部分:

当条件被提取到它自己的函数时,两个int实例long long在覆盖范围中正确显示为执行sizeof(T) <= sizeof(int)部分。什么可能导致这种行为以及如何解决它?它是 Clang/LLVM cov 中的错误吗?

有任何想法吗?

编辑:这似乎是 LLVM 中的一个已知错误(虽然尚不清楚 LLVM-cov 还是 Clang):

https://bugs.llvm.org/show_bug.cgi?id=36086

https://bugs.chromium.org/p/chromium/issues/detail?id=845575

0 投票
1 回答
226 浏览

c++ - 从断言调用时缺少 llvm-cov 覆盖

我有以下头文件:

电源.hpp:

电源.inl:

power_unit_test.cpp:

在使用标志编译-fprofile-instr-generate-fcoverage-mapping使用 clang++ 之后。运行单元测试二进制文件,我得到一个报告,告诉我 main 中的三行中的每一行都被调用了,但函数内容只使用了一次。这种使用来自对 的独立调用square(2),断言似乎无法正确生成覆盖率报告。

如果我删除独立square(2)的,那么覆盖率不会达到 100%,因为断言由于某种原因错过了产生覆盖率。

覆盖率报告如下:

电源.inl:

power_unit_test.cpp

请你能帮我理解为什么没有像我在这里期望的那样报道报道吗?这是 llvm-cov 中的错误还是我不理解覆盖意图?

在 MacOS 上使用自制的 clang 7.0.1 进行编译。使用 CMake 3.13.2 构建系统。

0 投票
2 回答
1314 浏览

llvm - 如何读取 llvm-cov json 格式?

我可以通过 llvm-cov 以 json 格式导出代码覆盖率数据,但内容对我来说似乎很神秘。部分中的每个数字segments是什么意思?