问题标签 [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.
llvm - 如何从 llvm-cov 生成 .gcov 文件?
我在 Xcode 7 上创建了一个生成代码覆盖率数据的项目。
在其 DerivedData 文件夹中,我可以运行llvm-cov show
:
这将产生如下输出:
但是,我想获取.gcov
文件,因为这是大多数工具使用的。有没有办法在不解析输出和.gcov
手动创建文件的情况下做到这一点?
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 之前将其写入文件,但是当我在运行命令后查看时文件为空。
难道我做错了什么?
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。
我错过了什么?
c++ - 如何使用 llvm-cov gcov 查看去杂函数名称?
你好,我使用 clang 编译器和 GTest 框架。我正在尝试查看每个函数中的代码覆盖率,但 llvm-cov gcov 没有显示函数名称 - 只是,难以理解,混乱的名称。如何查看分解的函数名称?Inb4:-m 标志不起作用。
linux - llvm-cov 和“未知的命令行参数:-format=html”
我使用 llvm 实用程序进行了代码覆盖率测试。之后,我需要做一个 html 封面文件。我使用了命令
然后我收到以下错误:
未知的命令行参数“-format=html”。
我怎样才能解决我的问题?
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 mycoverage
folder in the hope that maybe it would catch on mytest.profdata
. No dice, and it makes sense, since evenllvm-cov
needs the path to the executable file to run.Using the
export
functionality: when runningllvm-cov export --instr-profile=coverage/test.profdata ./test.out
I get a good-looking JSON file (via terminal). I tried throwing the output in acoverage.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?
c++ - 多进程覆盖报告
我正在尝试监视我的 C++ 项目的代码覆盖率。正如我在上一个问题中所说,我需要使用协程和其他高级 C++2a 功能,所以我使用clang++
它来编译它。我在这里发现,在编译时可以使用该-coverage
标志clang++
(很明显,使用-O0
and -g
)。
与可执行文件一起,这会生成一个.gcno
文件,其中包含可执行文件的映射。运行可执行文件时,会生成一个附加.gcda
文件,其中包含实际的分析数据。
我注意到,如果我多次运行可执行文件,覆盖输出会很好且正确地合并到.gcda
文件中,这非常好。
现在,我想知道同时运行多个可执行文件实例是否安全。
在任何人建议按顺序运行测试之前:我按顺序运行它们,但我的应用程序使用了大量网络,并且一些测试需要多个实例一起通信(我正在使用 Docker 来模拟网络,并netem
得到亲切-不真实的链接场景)。
一起运行同一个可执行文件的多个实例会导致任何问题吗?我可以想象,如果实现了任何锁定机制,覆盖数据将被安全地原子写入.gcda
文件,如果其他可执行文件需要执行转储,它们将等到锁被释放。但是,我找不到任何地方可以保证这确实会发生。
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
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 构建系统。
llvm - 如何读取 llvm-cov json 格式?
我可以通过 llvm-cov 以 json 格式导出代码覆盖率数据,但内容对我来说似乎很神秘。部分中的每个数字segments
是什么意思?