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

Mar*_*bri 11 code-coverage llvm xcode7 llvm-cov

我在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|            print("oi")
  0|   17|        }
  1|   18|    }
   |   19|}

/Users/marcelofabri/Desktop/testetestes/testetestes/OutraClasse.swift:
   |    1|//
   |    2|//  OutraClasse.swift
   |    3|//  testetestes
   |    4|//
   |    5|//  Created by Marcelo Fabri on 18/06/15.
   |    6|//  Copyright © 2015 Marcelo Fabri. All rights reserved.
   |    7|//
   |    8|
   |    9|import UIKit
   |   10|
   |   11|class OutraClasse: NSObject {
   |   12|
  1|   13|    func outroTestando() {
  1|   14|        if let numero = Int("123") {
  1|   15|            print("ae \(numero)")
  0|   16|        } else {
  0|   17|            print("oi")
  0|   18|        }
  1|   19|    }
   |   20|
   |   21|}
Run Code Online (Sandbox Code Playgroud)

但是,我想获取.gcov文件,因为它是大多数工具使用的.有没有办法在不解析输出和.gcov手动创建文件的情况下执行此操作?

Nik*_*nov 18

根据Apple gcov不是Xcode 7覆盖支持的一部分.Gcov是gcc的遗产,一直待到更换.显然他们放弃了传统的gcov文件格式支持,转而支持新的中间格式 - profdata.我自己进行了研究,并没有找到任何将profdata转换回gcov的工具,但是有来自Venom的Slather.Slather能够使用Gutter JSON,Cobertura XML,HTML和普通测试生成覆盖率报告.它还能够提供与Coveralls等流行服务的集成.目前它也只适用于gcov,但它们有问题已打开,PR请求等待支持profdata.他们通常会快速行动,因此很快就会合并为主人.

此外,如果您决定编写自己的工具,可以考虑采用多种方法进行审核:

  • 转换llvm-cov显示的纯文本输出
  • 通过以下格式文档转换profdata的二进制格式
  • 一旦他们将合并到profdata支持,帮助Slather人将他们的模型交叉转换回gcov

  • 我从PR分支中尝试了Slather并在博客文章中描述了我的经历:http://goo.gl/UUBrBu.它几乎是完美的,但我确实从llvm-cov和slather获得了不同的覆盖率,因此可能需要一些改进. (3认同)