xcrun llvm-cov 显示:未找到覆盖率数据

xcrun llvm-cov show: No coverage data found

xcrun llvm-cov show 命令出现return错误的可能原因是什么:无法加载覆盖范围:没有这样的文件或目录?

我有一个 iOS 库。 lib 构建的结果是 *.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 个结构相似的模块,其中一个工作正常,另外 2 个给我这个错误。

如果有人可以提示此错误的可能原因以及尝试的可能解决方案,我将不胜感激。

我的静态库遇到了 Xcode 正在构建的相同问题。

经过一些探索,我注意到传入构建期间生成的显式 .o 文件似乎可行,但输出仅限于该文件。

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

我尝试手动 link Build 文件夹中存在的所有这些 .o 文件,如下所示,以生成组合目标文件:

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 才能处理。