我在Xcode 7上创建了一个生成代码覆盖率数据的项目.
在其DerivedData文件夹中,我可以运行llvm-cov show:
/usr/local/opt/llvm/bin/llvm-cov show -instr-profile Build/Intermediates/CodeCoverage/testetestes/Coverage.profdata Build/Intermediates/CodeCoverage/testetestes/Products/Debug-iphonesimulator/testetestes.framework/testetestes
Run Code Online (Sandbox Code Playgroud)
这将产生如下输出:
/Users/marcelofabri/Desktop/testetestes/testetestes/Example.swift:
| 1|//
| 2|// Example.swift
| 3|// testetestes
| 4|//
| 5|// Created by Marcelo Fabri on 09/06/15.
| 6|// Copyright © 2015 Marcelo Fabri. All rights reserved.
| 7|//
| 8|
| 9|import UIKit
| 10|
| 11|class Example: NSObject {
1| 12| func testando() {
1| 13| if let url = NSURL(string: "dasdas") {
1| 14| print("ae \(url)")
0| 15| } else {
0| 16| …Run Code Online (Sandbox Code Playgroud) 我正在(终于!)为我全新的 C++ 项目设置代码覆盖率监控。由于我需要一些高级 C++20 功能(读取、协程),我将其clang 6用作编译器。
现在,我按照本指南了解如何为您的项目进行基本代码覆盖,一切都像魔术一样工作。如果我做:
clang++ -fprofile-instr-generate -fcoverage-mapping test.cpp -o test.out
LLVM_PROFILE_FILE="coverage/test.profraw" ./test.out
llvm-profdata merge -sparse coverage/test.profraw -o coverage/test.profdata
llvm-cov show ./test.out -instr-profile=coverage/test.profdata
Run Code Online (Sandbox Code Playgroud)
我在我的终端上收到一份漂亮的彩色报告,告诉我哪些内容被覆盖,哪些未被覆盖。
到现在为止还挺好!我以为我已经接近我想要的东西了,但是当我试图将报告上传到codecov.io时,痛苦就开始了。
我尝试了几件事,包括:
https://codecov.io/bash在我的coverage文件夹上运行他们的脚本,希望它可能会赶上我的test.profdata. 没有骰子,这是有道理的,因为甚至llvm-cov需要可执行文件的路径才能运行。
使用export功能:运行时llvm-cov export --instr-profile=coverage/test.profdata ./test.out我得到一个漂亮的 JSON 文件(通过终端)。我尝试将输出放入一个coverage.json文件中,该文件实际上已上传,但是 codecov 只是说解析它时出错,没有进一步的信息。
我感觉完全迷失了。在他们的网站上,一切似乎都是黑箱式的,我只是不明白如何完成任何不完全符合他们可以管理的情况的事情。
我如何才能使用 codecov 进行此操作?如果 codecov 无法处理我的报告,是否还有其他等效的在线代码覆盖率可用于使其正常工作?
我尝试安装 clang-9、clang-9-tools、llvm-9 和 llvm-9-tools 以获得程序 llvm-cov。这些软件包似乎都不包含 llvm-cov,这让我想知道哪个软件包包含它。
如何在 Ubuntu 18.04 上安装最新版本的 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。
我错过了什么?