xcrun llvm-cov show: данные о покрытии не найдены

Каковы возможные причины, по которым команда xcrun llvm-cov show возвращает ошибку: Не удалось загрузить покрытие: Нет такого файла или каталога?

У меня есть библиотека iOS. Результатом сборки библиотеки является *.a двоичный файл. У меня есть схема в проекте, которая также содержит модульные тесты GTest.

Итак, я выполняю:

      xcodebuild test \
-sdk iphonesimulator \
-destination "$DESTINATION" \
-derivedDataPath "$ROOT"/DerivedData \
-scheme unitTestsTarget \
-project "$ROOT"/libProject.xcodeproj \
-enableCodeCoverage YES

После того

      xcrun llvm-profdata merge .../Coverage.profdata .../EA8FF09E-3BFE-42D2-BFA7-A39D69E7F688-45921.profraw -output ./merged.profdata

И

      xcrun llvm-cov show -format=html -use-color=true -output-dir=./coverage-html -instr-profile ./merged.profdata -object ./DerivedData/Build/Products/Debug-iphonesimulator/myLib.a -ignore-filename-regex='\''.*\.h'\'''

И последняя команда дает мне

      error: ./myLib.a: Failed to load coverage: No such file or directory

У меня есть 3 модуля схожей структуры, и один из них работает нормально, а два других выдают мне эту ошибку.

Я был бы очень признателен, если бы кто-то мог дать подсказку о возможных причинах этой ошибки и возможных решениях, которые можно попробовать.

1 ответ

Я столкнулся с той же проблемой со своей статической библиотекой, которую создавал Xcode.

При некотором исследовании я заметил, что передача явных файлов, сгенерированных во время сборки, похоже, работает, но вывод был ограничен только этим файлом.

      xcrun llvm-cov report \
    --instr-profile=Build/ProfileData/40F9DE10-F76F-46C0-A8D2-E1D427DE08A5/Coverage.profdata \
    --object Build/Intermediates.noindex/MyStaticLib.build/Debug-iphonesimulator/MyStaticLib.build/Objects-normal/x86_64/some_file.o

Я попытался вручную связать все эти файлы, присутствующие в папке Build, следующим образом, чтобы создать объединенный объектный файл:

      ld -r -o CombinedObject.o \ 
    Build/Intermediates.noindex/MyStaticLib.build/Debug-iphonesimulator/MyStaticLib.build/Objects-normal/x86_64/*.o

После чего я смог запустить и получить отчет о покрытии.

      xcrun llvm-cov report \
    --instr-profile=Build/ProfileData/40F9DE10-F76F-46C0-A8D2-E1D427DE08A5/Coverage.profdata \
    CombinedObject.o

По сути, мне пришлось объединить индивидуальные .o файлы в объединенный объектный файл, который затем llvm-cov смог обработать.

Другие вопросы по тегам