Objective-C:由编译器优化的变量

时间:2009-12-28 05:00:02

标签: objective-c cocoa xcode compiler-construction gdb

我正在尝试运行以下代码:

1. NSURL *checkLicenseURL = [NSURL URLWithString:@"check_license.php?accesskey=&license_key="];
// call server API
2. NSError *err = nil;
3. NSXMLDocument *xmlResult = [[NSXMLDocument alloc] initWithContentsOfURL:checkLicenseURL options:NSXMLDocumentTidyXML error:&err];

但是当查看gdb中的变量时,执行第1行后,执行

p checkLicenseURL

返回

$1 = <variable optimized away by compiler>

它还会导致第3行崩溃。为什么会发生这种情况?如何解决这个问题?

2 个答案:

答案 0 :(得分:8)

只需在未启用优化的情况下进行编译,或者如果您使用某种向导来构建项目,则选择“调试”构建。我不确定在XCode中关闭优化的位置,但您可能需要这些GCC命令行选项进行调试:

-O0 -fno-inline

答案 1 :(得分:5)

关闭所有内容的优化是一种选择。也可以指示编译器不应该优化特定变量。使用volatile关键字:

的方法是这样做的
volatile NSURL *checkLicenseURL = ...

Wikipedia entry on volatile variables

另一个类似的问题:iPhone Variable Optimized Away by Compiler