【发布时间】:2015-04-14 08:57:06
【问题描述】:
我在控制台中遇到po 的这个问题,其中尝试输出函数本身可以工作,但输出变量或常量却不行。
正如您在此处看到的,虽然您认为 var/let 包含 bar.boy() 的内容,但 Swift 不知何故找不到它...
【问题讨论】:
标签: debugging swift console var po
我在控制台中遇到po 的这个问题,其中尝试输出函数本身可以工作,但输出变量或常量却不行。
正如您在此处看到的,虽然您认为 var/let 包含 bar.boy() 的内容,但 Swift 不知何故找不到它...
【问题讨论】:
标签: debugging swift console var po
我敢打赌,这个 bug 是因为 foo 在编译过程中已经被优化,并且它的符号在编译的代码中不再存在(即使它不应该在调试中存在,它仍然是一个 LLDB 错误)
如果您在下一行(甚至是 println)中添加一些 foo 的用法,那么它的符号有望保留在 IR 中,您将能够 po foo
(我同意这仍然是一个错误,但至少如果它有效,您将有一个解决方法和一些解释)
【讨论】:
事实证明,过去可能存在一个错误,即当您添加 Swift 文件时,它会添加/询问桥接头,但不会将该行添加到您的项目中
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
这意味着你会保持这种状态
导致error: <EXPR>:1:1: error: use of unresolved identifier!
我之所以能发现这一点,是因为我在项目中移动了文件,当我将 ObjC 文件添加到项目中时,它询问了我关于桥接头的问题(尽管我已经有了一个!)并且幸运地添加了 SWIFT_OPTIMIZATION_LEVEL。人们可以认为这是一个错误,因为默认值是fastest,但我想这只是过去的一个错误,现在得到了修复。
不过,我现在修复了它可能是一个错误,如果它在发布版本中添加 none。我现在无法测试这个,因为为了测试这个我只有一个Debug 构建。我将把它作为练习 :) 留给 Apple 的工程师。
【讨论】:
我将 Swift Complier 设置为“-O”
SWIFT_OPTIMIZATION_LEVEL = "-O";
并将其设置回“-Onone”。
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
然后就可以了。
【讨论】:
设置后修复:
Optimization Level = None[-Onone] 下 Swift 编译器 - 代码生成
注意在Apple LLVM 8.0 - Code Generation下设置Optimization Level没有效果
【讨论】:
如果您的项目使用 Swift,则项目/目标配置中有两个单独的“优化级别”设置。它不仅是“SWIFT_OPTIMIZATION_LEVEL”。检查此链接:https://stackoverflow.com/a/32984193/2060180
我会把它留在这里,以防它对某人有用。
【讨论】:
我遇到了类似的问题,但我已经进行了正确的配置,所有优化设置为 None。但是我仍然没有得到任何值。
经过进一步挖掘,我发现问题源于 Xcode 无法解析类型:
(lldb) frame variable self
<could not resolve type>
这让我想到了这个问题:xcode 8 Debugger 'Could not resolve type' 问题在哪里被描述并且桥接头似乎会导致问题。
由于我的项目没有任何桥接头,我再次研究了构建设置并找到了这个设置
最初设置为YES。将其更改为NO 后,符号再次起作用。
SWIFT_INSTALL_OBJC_HEADER = NO
【讨论】: