有时lldb po命令只返回对象地址

时间:2012-10-20 09:28:28

标签: ios command lldb po

我正在使用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对象(如果它有任何区别)。

1 个答案:

答案 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"