0

xcrun llvm-cov show 命令返回错误的可能原因是什么:加载覆盖失败:没有这样的文件或目录?

我有一个 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 个给我这个错误。

我真的很感激有人可以提示此错误的可能原因以及尝试的可能解决方案。

4

1 回答 1

1

我在 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

我尝试.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才能处理。

于 2021-02-26T11:05:52.637 回答