无法使用 Xcode 7.3.1 在我的 Swift 2 项目中检查带有“po”的变量 - 加载辅助函数时出错

Posted

技术标签:

【中文标题】无法使用 Xcode 7.3.1 在我的 Swift 2 项目中检查带有“po”的变量 - 加载辅助函数时出错【英文标题】:Cannot inspect variables with "po" in my Swift 2 project using Xcode 7.3.1 - error loading helper function 【发布时间】:2016-06-11 12:34:45 【问题描述】:

当我在 Xcode 7.3.1(使用标准 Swift 2 编译器)中运行我的 Swift 应用程序并在断点处暂停执行时,我无法使用 po 命令检查变量。第一次运行 po existsexists 是当前范围内的非可选 Bool 变量)时,我收到一条长错误消息(见下文)。从我第二次运行相同的命令开始,我收到error loading helper function: (null) 消息。

应用程序在调试方案上编译和运行,没有“部署后处理”和无 [-O0] 优化。

Xcode 的变量检查器面板中变量内容正确显示。

po self 或任何其他在设备和 ios 模拟器上运行的变量都会出现同样的错误。

如果我运行一个新的干净项目,使用 po 进行调试可以正常工作。


在当前范围内:

var exists: Bool = self.canRemoveAttachmentForEpisode(episode)
NSLog("Exists is now \(exists)") // Breakpoint is set here

这是调试器面板中发生的情况:

po exists
error loading helper function: <EXPR>:141:9: warning: '--' is deprecated: it will be removed in Swift 3
        --maxItemCounter
        ^~
                         -= 1
<EXPR>:237:14: warning: '++' is deprecated: it will be removed in Swift 3
            i++
             ^~
              += 1
<EXPR>:267:19: warning: 'init(start:end:)' is deprecated: it will be removed in Swift 3.  Use the '..<' operator.
        let rng = Range(start: si, end: ei.advancedBy(-1))
                  ^
<EXPR>:280:9: warning: initialization of variable '$__lldb_error_result' was never used; consider replacing with assignment to '_' or removing it
    var $__lldb_error_result = __lldb_tmp_error
    ~~~~^~~~~~~~~~~~~~~~~~~~
    _
<EXPR>:89:41: error: 'CustomStringConvertible' is ambiguous for type lookup in this context
                    if let csc = (x as? CustomStringConvertible) 
                                        ^~~~~~~~~~~~~~~~~~~~~~~
Swift.CustomStringConvertible:13:17: note: found this candidate
public protocol CustomStringConvertible 
                ^
Castamatic.CustomStringConvertible:1:17: note: found this candidate
public protocol CustomStringConvertible 
                ^
<EXPR>:101:41: error: 'CustomStringConvertible' is ambiguous for type lookup in this context
                    if let csc = (x as? CustomStringConvertible) 
                                        ^~~~~~~~~~~~~~~~~~~~~~~
Swift.CustomStringConvertible:13:17: note: found this candidate
public protocol CustomStringConvertible 
                ^
Castamatic.CustomStringConvertible:1:17: note: found this candidate
public protocol CustomStringConvertible 
                ^


(lldb) 



(lldb) po exists
error loading helper function: (null)

(lldb) 

【问题讨论】:

【参考方案1】:

我解决了这个问题。问题是我正在重新定义现有协议:

protocol MyCustomStringConvertible 

extension MyCustomStringConvertible where Self: RawRepresentable, Self.RawValue == String 
   ..

我重新定义了 CustomStringConvertible 协议,或者当我编写自己的版本时,Apple 的 CustomStringConvertible 可能不存在。可能该协议只有po在调试时使用,因此在运行时从未出现错误。

我唯一的疑问是:编译器不应该提醒我重新定义现有协议吗?

【讨论】:

以上是关于无法使用 Xcode 7.3.1 在我的 Swift 2 项目中检查带有“po”的变量 - 加载辅助函数时出错的主要内容,如果未能解决你的问题,请参考以下文章

无法修复签名问题 Xcode 7.3.1

xcode 7.3.1 无效的设备状态

Xcode 7.3.1 中的 C++ 链接错误和未定义引用

无法导入模块到xcode

无法使用版本 XCode 7.3.1 和 OS X 10.11.6 将应用程序提交到 iTunes

xcode 7.3.1 无法连接到 git