42

我已经升级到 Xcode 5.0。当我在调试模式下运行应用程序并尝试 NSString在控制台中打印一个值时,它给了我以下错误。有任何想法吗?

error: warning: couldn't get cmd pointer (substituting NULL): Couldn't load '_cmd' because its value couldn't be evaluated
Couldn't materialize struct: the variable 'stringValue' has no location, it may have been optimized out
Errored out in Execute, couldn't PrepareToExecuteJITExpression

这是代码:

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 
4

4 回答 4

81

错误消息中说明了原因:它可能已被优化出来......这意味着您正在以优化的方式编译和运行代码。

您必须将编译器优化级别从更改Fastest,Smallestnone

  • 转到您的目标构建设置
  • 搜索优化级别
  • 将其更改为无(无论您处于何种模式,即调试、分发或发布)
  • 利润

对您的项目设置执行相同的操作

于 2013-10-01T08:53:19.350 回答
38

确保您处于调试模式。去编辑方案>构建配置>调试

于 2013-10-01T08:17:07.167 回答
9

您可能正在尝试在“发布方案”中进行调试。转到“产品/方案/编辑方案”并在左侧面板中选择“运行”。然后将构建配置更改为“调试”。

于 2014-01-19T21:50:54.170 回答
3

一个替代答案:您可以通过使用变量来阻止它被优化,而不是通过删除优化来修复“它可能已被优化”。

所以,在你的问题中,如果你做一些事情stringValue

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 
NSLog(@"%@", stringValue);

stringValue将不再优化,因为您正在使用它。

如果您想查看项目中优化后变量的所有实例,请使用Product -> Analyze来分析您的项目。如果您打开了编译器优化,任何“死存储”警告(其中存储了一个值,并且从不读取)都将在编译时被优化。

于 2014-01-19T22:34:08.407 回答