【问题标题】:`po` gives `error: <EXPR>:1:1: error: use of unresolved identifier``po` 给出 `error: <EXPR>:1:1: error: use of unresolved identifier`
【发布时间】:2015-04-14 08:57:06
【问题描述】:

我在控制台中遇到po 的这个问题,其中尝试输出函数本身可以工作,但输出变量或常量却不行。

正如您在此处看到的,虽然您认为 var/let 包含 bar.boy() 的内容,但 Swift 不知何故找不到它...

【问题讨论】:

    标签: debugging swift console var po


    【解决方案1】:

    我敢打赌,这个 bug 是因为 foo 在编译过程中已经被优化,并且它的符号在编译的代码中不再存在(即使它不应该在调试中存在,它仍然是一个 LLDB 错误)

    如果您在下一行(甚至是 println)中添加一些 foo 的用法,那么它的符号有望保留在 IR 中,您将能够 po foo

    (我同意这仍然是一个错误,但至少如果它有效,您将有一个解决方法和一些解释)

    【讨论】:

    • 感谢您的赌注,但不,这不是问题所在。我很确定这与我的项目有关,因为另一个应用程序中的相同代码行为正确。
    【解决方案2】:

    事实证明,过去可能存在一个错误,即当您添加 Swift 文件时,它会添加/询问桥接头,但不会将该行添加到您的项目中

    SWIFT_OPTIMIZATION_LEVEL = "-Onone";
    

    这意味着你会保持这种状态

    导致error: &lt;EXPR&gt;:1:1: error: use of unresolved identifier!

    我之所以能发现这一点,是因为我在项目中移动了文件,当我将 ObjC 文件添加到项目中时,它询问了我关于桥接头的问题(尽管我已经有了一个!)并且幸运地添加了 SWIFT_OPTIMIZATION_LEVEL。人们可以认为这是一个错误,因为默认值是fastest,但我想这只是过去的一个错误,现在得到了修复。

    不过,我现在修复了它可能是一个错误,如果它在发布版本中添加 none。我现在无法测试这个,因为为了测试这个我只有一个Debug 构建。我将把它作为练习 :) 留给 Apple 的工程师。

    【讨论】:

    • 所以问题确实是由不需要的优化引起的 ;) ^^
    • 我仍然得到错误,即使在玩弄了这些设置之后:/
    • 谢谢。但是,我在 Xcode 8.0.0 中遇到了这个错误。优化设置为 -Onone。
    • 我从 swift 的第一天就得到了它们,并决定仅在今天进行搜索。优化设置为无,我仍然得到它们。比较随意,项目中的一些地方有效
    • 如果您的项目包含另一个编译为框架的项目,请记住在该项目中也进行更改。
    【解决方案3】:

    我将 Swift Complier 设置为“-O”

    SWIFT_OPTIMIZATION_LEVEL = "-O";
    

    并将其设置回“-Onone”。

    SWIFT_OPTIMIZATION_LEVEL = "-Onone";
    

    然后就可以了。

    【讨论】:

      【解决方案4】:

      设置后修复:

      Optimization Level = None[-Onone]Swift 编译器 - 代码生成

      注意在Apple LLVM 8.0 - Code Generation下设置Optimization Level没有效果

      【讨论】:

        【解决方案5】:

        如果您的项目使用 Swift,则项目/目标配置中有两个单独的“优化级别”设置。它不仅是“SWIFT_OPTIMIZATION_LEVEL”。检查此链接:https://stackoverflow.com/a/32984193/2060180

        我会把它留在这里,以防它对某人有用。

        【讨论】:

          【解决方案6】:

          我遇到了类似的问题,但我已经进行了正确的配置,所有优化设置为 None。但是我仍然没有得到任何值。

          经过进一步挖掘,我发现问题源于 Xcode 无法解析类型:

          (lldb) frame variable self
          <could not resolve type>
          

          这让我想到了这个问题:xcode 8 Debugger 'Could not resolve type' 问题在哪里被描述并且桥接头似乎会导致问题。

          由于我的项目没有任何桥接头,我再次研究了构建设置并找到了这个设置

          最初设置为YES。将其更改为NO 后,符号再次起作用。

          SWIFT_INSTALL_OBJC_HEADER = NO

          【讨论】:

            【解决方案7】:

            对于那些在 Objective-c 项目中使用 Swift 框架并想在该项目中调试 Swift 源文件的人:(在我的例子中,我有一个由 Cocoapods 管理的混合语言模块,我需要调试我的 Objective-c 示例项目中的 swift 模块)

            在我在我的 Objective-c 项目中添加了一个 Empty Swift 文件后,它对我有用。

            否则,那些快速编译器选项将不会显示在构建设置中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-12-19
              • 2015-05-20
              • 1970-01-01
              • 2012-10-06
              • 1970-01-01
              相关资源
              最近更新 更多