调试-`po`给出错误:<EXPR>:1:1:错误:使用未解析的标识符`

我在控制台中遇到bar.boy()的问题,在该控制台中尝试输出函数本身可以工作,但不能输出变量或常量。

first result is for <code>po bar.boy()</code>, second says <code>unresolved</code>

如您在此处看到的,尽管您认为var / let包含bar.boy()的内容,但是Swift却以某种方式找不到它...

StuFF mc asked 2019-11-11T10:08:45Z
6个解决方案
54 votes

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

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

这意味着您将保持这种状态

SWIFT_OPTIMIZATION_LEVEL fastest

导致none

我只能找到原因是因为我在项目中移动了文件,并且在向项目中添加ObjC文件时,它询问了有关桥接头的信息(尽管我已经有一个!),幸运的是添加了none。 考虑默认值的错误是Debug,但我又想这只是过去的错误,现在已得到解决。

不过,我现在修复了如果在发行版本中添加none的问题,则可能是另一种错误。 我现在无法进行测试,因为为了进行测试,我只有Debug版本。 我将其作为练习留给苹果工程师使用:)。

StuFF mc answered 2019-11-11T10:09:34Z
10 votes

我将Swift编译器设置为“ -O”

SWIFT_OPTIMIZATION_LEVEL = "-O";

并将其设置回“ -Onone”。

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

然后就可以了。

DàChún answered 2019-11-11T10:10:10Z
4 votes

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

也许,如果您在下一行(甚至是println)中添加foo的某些用法,则其符号将有望保留在IR中,并且您将能够po foo

(我同意那仍然是一个错误,但是至少如果它能起作用,您将有一个解决方法和某种解释感)

AliSoftware answered 2019-11-11T10:10:48Z
4 votes

设置后固定:

Swift编译器下的Optimization Level-代码生成

请注意,在Apple LLVM 8.0-代码生成下设置Optimization Level无效

Desmond DAI answered 2019-11-11T10:11:26Z
3 votes

我遇到了类似的问题,但是我已经有了正确的配置,所有优化都设置为SWIFT_INSTALL_OBJC_HEADER = NO。但是,我仍然没有任何值。

经过进一步的研究后,我发现问题源自Xcode,无法解析类型:

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

这使我想到了这个问题:xcode 8调试器“无法解析类型”描述了问题,并且桥接头似乎引起了问题。

由于我的项目没有任何桥接标头,因此我再次研究了构建设置并发现了该设置

setting[1]

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

SWIFT_INSTALL_OBJC_HEADER = NO

snod answered 2019-11-11T10:12:25Z
0 votes

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

如果对某人有用,我将其留在这里。

Ricardo Anjos answered 2019-11-11T10:12:58Z
translate from https://stackoverflow.com:/questions/28497533/po-gives-error-expr11-error-use-of-unresolved-identifier