7

我开始使用 Xcode 4.2,但在生成代码覆盖率时遇到了问题。

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

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

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

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

谢谢

4

3 回答 3

4

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


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

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

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

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

也许这对你有些用处。

于 2011-10-28T09:49:06.710 回答
3

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

在此过程中不会删除删除文件或目录,因此如果您将来需要使用 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
      
  3. 编辑 Xcode 4.2GCC 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;
      
  4. 备份 Xcode 4.2 iOS/Simulator Frameworkusr目录:

    [ 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
    
  5. 将 Xcode 4.1 iOS/Simulator Frameworkusr目录复制到 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
    
  6. 将Xcode 4.1gccinfoiOS SDK 库目录复制到 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
    
  7. 使用 gcc-4.2 编译!

    xcode 4.2 中 CGG 4.2 的截图

这是我写的一篇博客文章,其中包含有关此过程的更多信息。如果您遇到任何问题或有任何疑问,请随时在博客上发表评论。


[1]如果从命令行打开(使用类似vi, emacs,nano等),请确保将路径括在引号中"/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 没有

于 2011-10-29T21:59:57.620 回答
2

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

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

于 2011-10-23T22:13:04.643 回答