工作在需要10.6和64位的mac os項目(意思不是iPhone)上,允許我使用屬性在頭文件中生成存取器方法和實例變量。但是,在調試過程中,我看不到如何在填充後查看對象的屬性值。是否有一些需要打開的構建設置?Xcode 3.2.2和Objective-C 2.0和調試:在調試中,我的對象的屬性/實例變量值在哪裏?
如果我正在聲明一個對象的實例變量(在標題中的{}之間),那麼我可以在調試窗口本身中的調試過程中看到這些值(當它們被使用時),或者通過使用光標懸停例如,休息時在編輯器中突出顯示的線條技巧,或者通過在gdb中執行cli(比如「p * object」)。
老辦法:
@class Suit;
@interface Card : NSObject
{
NSNumber *playOrder;
Suit *suit;
NSNumber *displayNumber;
NSNumber *orderIndex;
}
@property(nonatomic, retain) Suit *suit;
@property(nonatomic, retain) NSNumber *displayNumber;
@property(nonatomic, retain) NSNumber *orderIndex;
新的方式:
@class Suit;
@interface Card : NSObject
@property(nonatomic, retain) Suit *suit;
@property(nonatomic, retain) NSNumber *displayNumber;
@property(nonatomic, retain) NSNumber *orderIndex;
@property(nonatomic, retain) NSNumber *playOrder;
在這個新奇的10.6所需的64位主意
(這似乎簡單到我)沒有這些調試方法顯示對象的值。我認爲我必須關掉某些東西,因爲這個新想法似乎並不好。
gdb的結果舊的方式:
(gdb) po newCard
New Card : 0 of Suit : Hearts (NSCalibratedRGBColorSpace 1 0 0 1). with orderIndex of: 1
(gdb) p *newCard
$1 = {
<NSObject> = {
isa = 0x100002188
},
members of Card:
playOrder = 0x0,
suit = 0x200053a20,
displayNumber = 0x20001bac0,
orderIndex = 0x200012de0
}
(gdb)
GDB結果新的方式:
(gdb) po newCard
New Card : 0 of Suit : Hearts (NSCalibratedRGBColorSpace 1 0 0 1). with orderIndex of: 1
(gdb) p *newCard
$3 = {
<NSObject> = {
isa = 0x100002188
}, <No data fields>}
(gdb)
所以在看文檔的Objective-C的2.0:
描述我所指的(在'modern'中綜合實例變量無用的),但是在任何地方都沒有說過,如果你這樣做,這些值在調試過程中將不可用。
我已經找到了相關信息的SO頁面,而不是專注於這個效果: Using instance variables with Modern Runtime
我錯過了什麼?
你有可能打開了garbace收藏嗎?嘗試將其關閉,然後查看調試器是否在字段中選擇。 – 2010-06-10 07:48:24
在兩個示例測試中都有垃圾回收。 – lulu 2010-06-11 01:06:08