5

我正在尝试在 iPhone Project 上使用 gcov 并按照此处描述的 Apple 说明进行操作,但它不起作用。

当我构建并配置项目时,会为每个目标文件创建 .gcda 文件。但是没有执行的行被记录到 .gcda 文件中。(CoverStory 显示所有覆盖率均为 0%)

我刚刚向模板项目添加了一个简单的类,如下所示。

@interface SomeClass : NSObject
- (void)func1:(BOOL)flag;
@end

@implementation SomeClass
- (void)func1:(BOOL)flag {
  if (flag) {
    NSLog(@"flag is YES");
  }
  else {
    NSLog(@"flag is NO");  
  }
}
@end

我分配了这个类并在 application:didFinishLaunchingWithOptions 中调用了 func1,我希望显示 SomeClass 的覆盖率(50% 左右)。

我正在使用 OSX 10.6.4、iPhone SDK 4.0 和 Xcode 3.2.3。需要更多配置吗?请指导。

2010/7/15 更新:

我在@tonclon 给我的链接中尝试了这些提示,但它还没有奏效。在下面的描述中是我尝试过的。

  1. GCC 4.0 编译的 Cocoa 应用程序在“Cocoa”应用程序的项目设置中,

    • 将 GCC_INSTRUMENT_PROGRAM_FLOW_ARCS 设置为 YES
    • 将 GCC_GENERATE_TEST_COVERAGE_FILES 设置为 YES
    • 将其他链接器标志设置为 -lgcov
    • 将 C/C++ 编译器版本设置为 4.0

    它起作用了,.gcda 文件按预期生成了覆盖信息。但是,在带有 SDK 4.0 的 iPhone 项目中,我不能使用相同的配置,因为 gcc 4.0 无法在 SDK 4.0 中编译某些语法(例如 Blocks)

  2. 在 google-tool-box 中使用自定义 gcov 库而不是在 Other Linker Flag 中设置 -lgcov,我尝试了 google-toolbox-for-mac 中包含的自定义 gcov 库,但生成的 .gcda 文件显示覆盖率为 0%。(同样的结果)

你能告诉我下一步我应该做什么吗?任何建议表示赞赏。

4

1 回答 1

0

有几件事:

  1. 关闭前缀标头
  2. 确保你“正确”退出

请在此处查看 gcov 页面 (http://code.google.com/p/google-toolbox-for-mac/w/list),看看它们是否有帮助。我有 gcov 使用 Xcode 3.2.5 和 iOS4.2。

于 2011-01-04T04:37:09.403 回答