在需要 10.6 和 64 位的 mac os 项目(不是 iPhone)上工作,允许我使用属性在头文件中生成访问器方法和实例变量。但是,在调试期间,我看不到如何在对象的属性值被填充后查看它们。是否有一些build设置需要打开?
如果我正在声明一个对象的实例变量( header 中的 {} 之间),那么我可以在调试期间在调试窗口本身或通过将光标悬停在在休息期间在编辑器中突出显示行技巧,或者通过在 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 的文档:
描述了我所指的内容(在“现代”运行时中合成实例变量),但没有在任何地方说明,如果你这样做,这些值将在调试期间不可用。
我找到了一个包含相关信息的 SO 页面,但并未关注此效果: Using instance variables with Modern Runtime
我错过了什么?
最佳答案
在 GDB 中,您可以使用属性 getter 来访问动态 ivars:
(gdb) po [newCard displayNumber] 0
关于objective-c - xcode 3.2.2 和 objective-c 2.0 和调试 : where are my object's property/instance variable values in debug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970399/