【问题标题】:Objective-C: variable optimized away by compilerObjective-C:编译器优化掉的变量
【发布时间】:2009-12-28 05:00:02
【问题描述】:

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

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 行崩溃。为什么会发生这种情况,我该如何解决?

【问题讨论】:

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


    【解决方案1】:

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

    -O0 -fno-inline
    

    【讨论】:

    • 我在Xcode中使用了“debug”模式,但还是报这个错。
    【解决方案2】:

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

    volatile NSURL *checkLicenseURL = ...
    

    Wikipedia entry on volatile variables

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多