如何让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

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

lldb----打印出类中所有函数的入口地址

如何使用 LLDB 打印内存地址的内容?

分享你最喜欢的技巧和提示(Xcode,Objective-C,Swift,C...等等)

使用 lldb 打印带有换行符的字符串