Xcode LLDB 打印语句失败 - NSUndoManager

Posted

技术标签:

【中文标题】Xcode LLDB 打印语句失败 - NSUndoManager【英文标题】:Xcode LLDB Print Statements Fail - NSUndoManager 【发布时间】:2014-07-30 07:17:37 【问题描述】:

我设置了断点并想打印我的 UITextField 的超级视图。我输入 po myTextField.superview 但收到以下错误:

error: instance method 'undoManager' has incompatible result types in different translation units ('id' vs. 'NSUndoManager *')
note: instance method 'undoManager' also declared here
error: 1 errors parsing expression

这是什么意思?如何打印我的超级视图?我找到了一个在代码中提供了一个 janky 解决方法的链接:http://openradar.io/15890965,但我想要一个更好的解决方案。

【问题讨论】:

同样的故事:我在 UITableView 的类别上尝试 po tableView.gestureRecognizers 我在尝试 po frame、bounds、recursiveDescription、constraints 等(仅限内置方法)时多次看到此错误。似乎是一个严重的 xcode/lldb 错误。 【参考方案1】:

世界人民:我有答案!

要避开所有 UIKit 错误:在输入 po 语句之前,输入以下行 -- expr @import UIKit

如果您想为您的应用全局启用此功能,请在您的应用委托中添加以下断点:

感谢 Craig Hockenberry 和 Steve Streza 的更新(发现 here)。

【讨论】:

本文告诉你如何为所有项目开启此功能:merowing.info/2015/12/…【参考方案2】:

我在调试时用来防止此错误的解决方案是显式转换所有内容

在你的情况下,我会这样做

po [(UITextField *)myTextField superView]

【讨论】:

从最初的测试来看,这似乎对我有用。但是,上面链接中的第二条评论 (openradar.io/15890965) 声称它会发生在他们身上,即使是在显式转换时也是如此。还有人想插话吗? 我尝试显式转换,但仍然出现此错误。例如po (NSString *)[((IBADBannerView *)adView) recursiveDescription]【参考方案3】:

“myTextField”是否有任何自定义访问器方法?我已经多次看到同样的问题,它通常是由于 po 试图打印一个对象的属性,该对象在第一次调用它的 getter 时被初始化。例如,如果我尝试在 UITableViewCell 上运行“po self.imageView.contentMode”,我会得到同样的错误。尝试将断点移动到代码中您知道“myTextField”已完全初始化的位置。

【讨论】:

我没有用于 myTextField 的自定义访问器方法。好主意。【参考方案4】:

myTextField 真的指向UITextField 吗?这就是出现此错误的原因之一。比如下面的代码会编译,如果我在第三行设置断点,我可以输入po b.superview来重现你看到的错误。

NSString *a = @"not a view";
UITextField *b = (UITextField *)a;
UIView *view = b.superview;

尝试在您的 LLDB 提示符下输入 po [myTextField class],看看它是否真的是 UITextField。它可能是另一种类型的对象,或nil

【讨论】:

myTextField 确实指向UITextField(通过插座)。【参考方案5】:

我在 Xcode 5.1.1 中遇到了这个错误,并通过退出 Xcode 5.1.1 并尝试 Xcode 6 来修复它。为 Xcode 5.1.1 重新启动 Xcode 5.1.1 也可能适用于某些人。

【讨论】:

我还没有在 Xcode 6 中发现这个错误,所以 Apple 可能已经修复了它。不过,我们还需要一些时间才能确定。

以上是关于Xcode LLDB 打印语句失败 - NSUndoManager的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xcode LLDB 控制台在 Swift 中调试闭包

学习笔记之--认识Xcode中的重要成员:lldb调试器

让Xcode的控制台支持LLDB类型的打印

为什么Xcode调试模式下, lldb调试器打印任何对象都为空, 鼠标指向对变量时显示为nil?

Xcode 调试技巧-b

Xcode/LLDB:如何获取有关刚刚抛出的异常的信息?