Как создать файл.gcov из 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

Это произведет вывод как это:

/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|}

Тем не менее, я хотел бы получить .gcov файлы, так как это то, что большинство инструментов используют. Есть ли способ сделать это без разбора вывода и создания .gcov подать вручную?

1 ответ

Решение

По словам Apple, gcov не является частью поддержки покрытия Xcode 7. Gcov был наследием gcc, которое оставалось до появления замены. Очевидно, они отказались от поддержки устаревшего формата файлов gcov в пользу нового промежуточного формата - profdata. Я проводил исследования самостоятельно и не нашел никаких инструментов, которые бы конвертировали профданные обратно в gcov, однако есть Slather из Venom. Slather может генерировать отчеты о покрытии в форматах Gutter JSON, Cobertura XML, HTML и обычном тестировании. Он также может обеспечить интеграцию с популярным сервисом, таким как Coveralls. В настоящее время он работает также только с gcov, но у них есть открытый вопрос и PR-запрос в ожидании поддержки profdata. Они обычно двигаются быстро, поэтому скорее всего скоро будут объединены в мастера.

Также, если вы решите написать свой собственный инструмент, есть несколько подходов, которые вы можете рассмотреть для рассмотрения:

  • Преобразование вывода простого текста из шоу llvm-cov
  • Преобразование бинарного формата profdata в соответствии с документацией формата
  • Помогите ребятам из Slather представить перекрестное покрытие от их модели обратно в gcov, как только они объединятся в поддержку profdata
Другие вопросы по тегам