如何让lldb打印写在Objective-C类别中的描述
Posted
技术标签:
【中文标题】如何让lldb打印写在Objective-C类别中的描述【英文标题】:How to let lldb print the description written in an Objective-C category 【发布时间】:2016-02-06 03:37:33 【问题描述】:调试约束问题的绝妙技巧print the constraint`s id in lldb
但是我应该怎么做才能让 lldb 打印我的类别的描述呢?
@interface NSLayoutConstraint (Description)
@end
@implementation NSLayoutConstraint (Description)
-(NSString *)description
return [NSString stringWithFormat:@"id: %@, constant: %f", self.identifier, self.constant];
@end
非常感谢您的帮助:)
【问题讨论】:
您永远不应该覆盖类别中的方法。这是未定义的行为。 @rmaddy 但链接说它有效...... 它可能有效。它可能不会。这就是未定义行为的问题。 我再次测试,它只是工作...... :)) 【参考方案1】:您可以通过两种方式使用描述方法。一,如果在你的应用程序的代码中你做的地方:
NSLog(@"My Object: %@", my_object);
然后%@
说明符将打印对象的“描述”方法返回的 NSString。
另一种方式是在调试器中:
lldb(以及之前的 gdb)有一个名为 po
的命令——它是 print-object
的缩写。它的工作是获取一些表达式,对其进行评估,将结果(在 ObjC 的情况下)解释为 NSObject 并将该对象发送到 description
方法。
所以在调试器中你可以调用
(lldb) po object
然后打印出来。
不过有一个细节:po
实际上首先检查对象是否响应debugDescription
,它会优先调用description
。因此,如果您正在扩展一个实现 debugDescription
的对象(一些 Kit 对象会这样做),那么 po
将向您显示 debugDescription 方法的结果,而不是您的描述。
【讨论】:
以上是关于如何让lldb打印写在Objective-C类别中的描述的主要内容,如果未能解决你的问题,请参考以下文章
(lldb) 以十六进制打印 unsigned long long