我正在使用lldb在Mountain Lion 10.8.2中使用Xcode 4.5.1调试iOS应用程序。
有时候我会尝试在断点处检查调试器窗口中的iVar:
po _currentSale
并将收到回复:
打印自我> _currentSale的描述: (Sale *)_ currentSale = 0x081cd7e0
有时候我会收到这个回复(这就是我想要的):
打印自我> _currentSale的描述: '<'Sale:0x81cd7e0'>' (entity:Sale; id:0x81dd670; data:{ cardNumber =“\ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U2022 \ U20220001”; cvv = 222; emailAddress =“k@w.com”; expirationDate = 0413; lastStatus =已批准; purchaseNumber = 00000008; saleAmount = 230; saleDate =“2012-10-20 08:06:45 +0000”; sectionIdentifier = 20121020; tipPercentage = 15; 交易=( “0x75df620'<'x-coredata:// 4A0DEB78-C770-4CE2-8A5D-878F51294D6D / Transaction / p11'>'” ); zipCode = 33333; })
为什么回复在有时给我对象地址和完整描述其他地址之间有所不同?我的Sale对象是一个Core Data对象(如果它有任何区别)。
答案 0 :(得分:0)
我不是积极的,但我不认为这是来自lldb。 po
是对char *_NSPrintForDebugger(id)
调用的精简贴面,您可以通过直接调用_NSPrintForDebugger
来轻松测试文本的来源,v。
Process 10842 stopped
* thread #1: tid = 0x1f03, 0x00000001000018f9 a.out`main + 153 at objc-prog.m:88, stop reason = step over
#0: 0x00000001000018f9 a.out`main(argc=1, argv=0x00007fff5fbffb18) + 153 at objc-prog.m:88
85
86 NSString *a = @"hi there";
87
-> 88 [object randomFunc];
(lldb) p a
(NSString *) $1 = 0x0000000100002470 @"hi there" // lldb's built-in NSString summary formatter
(lldb) po a
(NSString *) $2 = 0x0000000100002470 hi there
(lldb) p (char*)_NSPrintForDebugger(a)
(char *) $4 = 0x000000010010f400 "hi there"
(lldb) p (char*)_NSPrintForDebugger(0x0000000100002470)
(char *) $3 = 0x0000000100114c60 "hi there"