【问题标题】:Xcode 5 debugger doesn't print objectsXcode 5 调试器不打印对象
【发布时间】:2013-10-01 02:16:39
【问题描述】:

升级到 xcode 5 后,我在使用 lldb 调试器从控制台调试时遇到问题。我曾经输入 po object,它曾经工作正常,但现在我收到错误

error: instance method 'performBlock:afterDelay:' has incompatible result types in different translation units ('id' vs. 'void')
note: instance method 'performBlock:afterDelay:' also declared here

这里是堆栈的screenshot,调试器停止的代码,可视调试器和调试器控制台中的值。可能是什么问题,是 xcode 5 中的错误还是我可以做些什么来纠正这个问题?

【问题讨论】:

  • Xcode 5 调试器非常适合我,我一直使用p 和po 命令...您确定您的运行配置实际上设置为debug而不是release(通常会去掉这些)?
  • 编辑以上内容:至少对于我的 Xcode,如果您将运行配置设置为 release,它实际上会忽略断点...我还尝试通过更改 code generation > optimization level build settings,它也没有重现这个......不知道你改变了什么......所以,+1,希望比我更聪明的人可以帮助你。 :D
  • @JRG-Developer 运行配置设置为debug。我只创建了项目所需的 iokit 框架的符号链接,否则不会编译(它给出了链接器错误,似乎苹果在发布 xcode 5 之前没有创建到框架根目录的符号链接,这与其他框架根目录不同)

标签: ios objective-c xcode xcode5 lldb


【解决方案1】:

我找到了解决此问题的方法。问题是我个人的内部框架在 NSObject 上的一个类别中声明了一个方法,称为:

- (void)performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;

但第三方框架(此处为 BlocksKit)声明了相同类型的方法:

- (id)performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;

这两个似乎干扰了 LLDB 的运行时并产生了这个奇怪的消息。为了修复它,我只是更改了其中一个方法名称。请让我知道这是否适合您。

【讨论】:

  • 如果有人遇到这个问题并且正在使用 UIKitCategoryAdditions 项目,那么它在 NSObject 上有一个类别会导致这个问题。如果您正在使用这个项目,我强烈建议您进行上述修复。
猜你喜欢
  • 2014-10-20
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
相关资源
最近更新 更多