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
смог обработать.