【问题标题】:Xcode 4.2 Code CoverageXcode 4.2 代码覆盖率
【发布时间】:2011-10-15 08:24:19
【问题描述】:

我开始使用 Xcode 4.2,但无法生成代码覆盖率。

Xcode 4.2 不包含 GCC 4.2 编译器,但它已被 LLVM GCC 4.2 编译器取代。 第一个用于在以前版本的 Xcode 中生成代码覆盖率。

我按照 CoverStory website 上的“教程”进行操作,但结果如下:

a) 当我执行所有步骤时,没有覆盖文件。
b) 当我将 libprofile_rt.dylib 链接到我的项目时,应该失败的测试不再失败。

有人遇到过这个问题吗?你是怎么解决的?

谢谢

【问题讨论】:

    标签: gcc llvm xcode4.2 llvm-gcc gcc-4.2


    【解决方案1】:

    This Blog 有一个很好的教程,介绍了如何使用 LLVM 获得与 gcc 兼容的覆盖结果。

    覆盖功能在当前的 LLVM 前端中可用,但似乎没有公开
    在 XCode 附带的当前版本中。

    我同意作者的观点,它可以作为一种解决方案来编译您自己的版本以进行覆盖 并坚持使用随附的版本进行最终的二进制生成。

    我还值得注意的是,他的教程声称:

    Since Clang outputs these files in the same format as GCC,
    they are compatible with tools such as CoverStory.
    

    也许这对你有些用处。

    【讨论】:

    • 谢谢,看起来很有希望。我有空的时候看看。
    • 链接断开。这是 [同一篇文章] (mattrajca.com/blog/2011/08/14/llvm) 的当前链接。和 other post 让我重新开始使用 CoverStory 和 XCode 4.5。
    【解决方案2】:

    这是一种在 xcode 4.2 中启用 gcc 4.2 编译的方法。这主要是通过命令行完成的,所以当您看到以 [ 15:30 jon@MacBookPro / ]$ 开头的行时,您需要打开 Terminal.app 并运行在 $ 之后开始的命令。

    在这个过程中没有removeddeleted文件或目录,所以如果你以后需要用LLVM编译,很容易撤消。

    1. 下载 - 但安装尚未 - xcode_4.1_for_lion.dmgxcode_4.1_for_snow_leopard.dmg

    2. 现在,按照以下步骤将 Xcode 4.1 安装到 /Developer-4.1

      1. 备份工作的/Developer 目录(Xcode 4.2 的安装位置)

      2. [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.2
        
    3. 使用默认安装位置 (/Developer) 运行 Xcode 4.1 安装程序

    4. 将新的 Xcode 4.1 安装移动到 /Developer-4.1

      [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.1
      
    5. 将 Xcode 4.2 开发者目录移回/Developer

      [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer-4.2 /Developer
      
  • 编辑 Xcode 4.2 GCC 4.2.xcspec 文件以使 gcc 4.2 显示在编译器选项列表中[1]:

    [ 15:30 jon@MacBookPro / ]$ sudo vi "/Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/GCC 4.2 (Plausible Blocks).xcplugin/Contents/Resources/GCC 4.2.xcspec"
    
    • 从这里更改第 4142 行:

      ShowInCompilerSelectionPopup = NO;
      IsNoLongerSupported = YES;
      
    • 到这里:

      ShowInCompilerSelectionPopup = YES; 
      IsNoLongerSupported = NO;
      
  • 备份 Xcode 4.2 iOS/Simulator Framework usr 目录:

    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer/Platforms/iPhoneOS.platform/Developer/usr /Developer/Platforms/iPhoneOS.platform/Developer/usr.backup
    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer/Platforms/iPhoneSimulator.platform/Developer/usr /Developer/Platforms/iPhoneSimulator.platform/Developer/usr.backup
    
  • 将 Xcode 4.1 iOS/Simulator Framework usr 目录复制到 Xcode 4.2:

    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/usr /Developer/Platforms/iPhoneOS.platform/Developer/usr
    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/usr /Developer/Platforms/iPhoneSimulator.platform/Developer/usr
    
  • gccinfo iOS SDK库目录从Xcode 4.1复制到Xcode 4.2[2]

    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/gcc /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc
    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/info /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/info
    
  • 使用 gcc-4.2 编译!

  • This is a blog post I've written with a little more info about this process. Feel free to leave a comment on the blog if you run into any issues or have any questions.


    [1] 如果从命令行打开(使用类似viemacsnano 等),请确保将路径括在引号中 " /long path/with spaces/in it/file.xcspec" 或转义空格 /some/long\ path/with\ spaces/in\ it/file.xcspec

    [2] 这是必要的,因为 iPhoneOS.platform SDK 有自己单独的 /usr/lib 目录,但 iPhoneSimulator.platform SDK 没有

    【讨论】:

      【解决方案3】:

      Xcode 4.2 的默认编译器是 LLVM 3.0。 Apple 正在从 LLVM 迁移到 GCC 4.2,它仍然可以作为一个选项使用。然而,GCC 4.2 已经一去不复返了。

      我想你别无选择,只能找到一个适用于 LLVM 3.0(最好)或 LLVM GCC 4.2 的不同代码覆盖解决方案,或者等到有人提供这样的工具。毕竟,Xcode 4.2 相对较新,代码覆盖率也相对重要,所以我相信最终会出现一个可行的解决方案。

      【讨论】:

        猜你喜欢
        • 2012-02-02
        • 2012-02-07
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        相关资源
        最近更新 更多