我已升级到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"];
答案 0 :(得分:80)
原因在错误消息中说明:它可能已经过优化 ..这意味着您正在以优化的方式编译和运行代码。
您必须将编译器优化级别从Fastest,Smallest
更改为none
:
为您的项目设置执行相同的操作
答案 1 :(得分:38)
确保您处于调试模式。转到修改计划> 构建配置>调试
答案 2 :(得分:9)
您可能正在尝试在“发布方案”中进行调试。转到“产品/方案/编辑方案”,然后在左侧面板中选择“运行”。然后将构建配置更改为“debug”。
答案 3 :(得分:3)
一个替代答案:而不是修复"它可能已被优化"通过删除优化,您可以通过使用变量来阻止优化。
因此,在您的问题中,如果您使用stringValue
执行某些操作:
NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"];
NSLog(@"%@", stringValue);
stringValue
将不再优化,因为您正在使用它。
如果要在项目中查看优化输出变量的所有实例,请使用产品 - > 分析以分析您的项目。任何"死店"如果打开了编译器优化,则会在编译时优化警告(其中存储值,从不读取)。