微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xcode 3.2.2和objective-c 2.0和debug:调试中我的对象的属性/实例变量值在哪里?

在需要10.6并且是64位的mac os项目(意思不是iPhone)上工作,允许我使用属性在头文件生成访问器方法和实例变量.但是,在调试期间,我没有看到如何在填充对象的属性值后查看它们.是否有一些需要打开的构建设置?

如果我声明一个对象的实例变量(在标题中的{}之间),那么我可以在调试期间在调试窗口本身中看到这些值(当它们被使用时),或者通过使用光标悬停在突出显示的线条技巧上在休息期间在编辑器中,或者像在’p * object’中那样在gdb中执行cli.

旧方式:

@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) 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的文档:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW3

描述我所指的(在’现代’运行时中合成实例变量),但在任何地方都没有说,如果你这样做,那么在调试期间这些值将不可用.

我找到了一个包含相关信息的SO页面,但没有关注这个效果
Using instance variables with Modern Runtime

我错过了什么?

解决方法

在GDB中,您可以使用属性getter来访问动态ivars:
(gdb) po [newCard displayNumber]
0

原文地址:https://www.jb51.cc/iOS/334071.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐