【发布时间】:2013-08-08 01:46:06
【问题描述】:
我覆盖了对象的 -(NSString*)description,但是 Xcode 总是在变量视图的摘要字段中显示 error: summary string parsing error。
我目前的实现如下:
- (NSString*)description {
return [NSString stringWithFormat:@"<%@ %p> x=%f, y=%f", self.class, self, _x, _y];
}
如果我在控制台中输入po objectName,LLDB 会按预期显示良好的输出,但是Xcode 和命令p objectName 总是指示错误,那么使汇总字段工作的正确调试描述格式是什么?值得注意的是,“p”命令的输出与您在 Xcode 中看到的 Foundation 类实例的摘要消息相同。
更新:
据我从“WWDC 2012 session Debugging in Xcode”中可以看出,自定义摘要只能使用自定义 python 脚本来实现。 -(NSString*)description 或 -(NSString*)debugDescription 方法无论如何都没有连接到摘要消息。我以为是因为我显示了一个错误,但对于没有自己的格式化程序的类来说,这似乎是一条标准消息。
【问题讨论】:
-
您说“覆盖”——这是子类还是类别?什么是超类?
-
我不明白你说你在 Xcode 中做“p objectName”。在 Xcode 调试器中,我总是为一个对象使用
po。p用于标量。 -
Hot Licks 需要注意的一点是,“p objectName”将适用于大多数标准 Foundation 对象(您的 NSStrings、您的 NSArrays 等),因为 lldb 有内置的格式化程序,它知道如何格式化对象而不在程序中运行任何代码。正如 Andy 在他的更新中指出的那样,您还可以在 Python 中为您自己的对象编写自己的自定义格式化程序——一旦掌握了它就很容易了。
-
@Andy - 变量显示很少起作用(并且经常锁定调试器),我几乎从不使用它。
-
我同意 Enrico 的观点。如果您在 18 个月前对 Xcode 中的变量显示有问题,那么您几乎可以肯定是在使用 gdb(它实际上是在您的程序中运行代码以得出这些摘要)。这是有问题的,这就是为什么 lldb 完全采用了不同的技术。 Xcode 4.6 适用于标准类型——如果人们发现问题,请在bugreport.apple.com 提交错误报告
标签: objective-c xcode lldb