2012-01-27 25 views
1

po命令有點無用,至少除非有一些符文必須投入才能使它有用,在這種情況下它們是什麼?如何使用po或等價物來檢查控制檯或Xcode中的iVar?

例如,利用這個代碼:

MyClass *myClass = ... 
NSLog(@"stuff: %@", myClass.stuff); 

如果運行在Xcode這個代碼,並試圖調試那麼PO表現爲:

(gdb) po myClass 
<MyClass: 0xee34567> 

(gdb) po myClass.stuff 
There is no member named stuff 

它爲什麼要這樣做。有一個叫做stuff的屬性,NSLog在查看它時沒有問題。所以如何檢查Xcode中的成員變量,我知道這個問題在此之前已經有很多次了,但是在閱讀之後,我仍然找不到一個體面的方式來做這件事。

+0

Obj-C屬性使用C結構語法,但將其應用於指向結構體的指針,而不是結構體自身。因此「沒有名字的成員」。但是,gdb理解「正常」的Obj-C消息語法,因此[myClass stuff]有效。 – Costique 2012-01-27 20:41:28

回答

0

此答案適用於Objective C,具體而言。 po只適用於ObjC對象,所以我假設這就是你在這裏問的。

你試過:

po [myClass stuff] 

這工作得很好,我 - 假設stuff是一個屬性。

po myObj相當於撥打[myObj description]。如果您想使用po列出特定對象的所有ivars,則必須爲其類實現合適的description方法。我不知道有任何列出一個類的ivars的自動機制。至少如果你正在處理物業,那很可能是。

這也值得一讀:gdb for Objective C

+0

酷ta。是否有命令顯示屬於myClass的所有實例變量? – Gruntcakes 2012-01-27 20:36:34

+0

@Woofbeans我已經編輯了一些答案。 – 2012-01-27 20:42:58

相關問題