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

Che*_*tan 4 compiler-construction xcode cocoa gdb objective-c

我试图运行以下代码:

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];
Run Code Online (Sandbox Code Playgroud)

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

p checkLicenseURL
Run Code Online (Sandbox Code Playgroud)

回报

$1 = <variable optimized away by compiler>
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*son 8

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

-O0 -fno-inline
Run Code Online (Sandbox Code Playgroud)


Eva*_*van 5

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

volatile NSURL *checkLicenseURL = ...
Run Code Online (Sandbox Code Playgroud)

关于volatile变量的维基百科条目

另一个类似的问题:iPhone变量被编译器优化