如何在调试器中显示复杂对象?

时间:2010-05-18 15:32:40

标签: iphone cocoa-touch xcode debugging

我想显示属性myarray的内容,来自以下单例:

[Session sharedManager].myarray

我试过这些:

po [Session sharedManager]. myarray

po [[Session sharedManager] myarray]

但总是会收到此错误:

A syntax error near end of expression.

有什么建议吗?

---编辑---

我正在使用SDK 3.0。

我发现了这个问题,我有三个开放式括号而不是两个。你在这里看不到,因为我错误地输入了括号的数量。它现在正在运作。感谢。

2 个答案:

答案 0 :(得分:2)

如果您使用XCode调试器并在某个位置设置断点,该变量已经初始化并且可以看到,则可以单击该变量并选择“打印描述”。

您可以像NSLog()那样以简单的方式完成。这种方法有什么问题?通常,我看到它会打印出数组中所有对象的所有description()方法吗?

我不确定,但在声明结尾处你没有分号。 “;”,你可以重新检查一下吗?

答案 1 :(得分:1)

你所描述的是非常奇怪的。我设置了一个测试应用程序,并且能够从单例中打印对象就好了。

#import "testAppDelegate.h"

//A Session Singleton
@interface Session : NSObject {
    NSArray *myArray;
}
@property (nonatomic, retain)   NSArray *myArray;
@end

@implementation Session
@synthesize myArray;
static Session *sharedSession;
+(Session *)sharedSession {
    if (!sharedSession) {
        sharedSession = [[Session alloc] init];
        sharedSession.myArray = [NSArray arrayWithObjects:@"A",@"B",@"C",nil];
    }
    return sharedSession;
}
@end


//App Delegate
@implementation testAppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    NSLog(@"%@",@"Breakpoint Here"); //Here is where I set My breakpoint
    return YES;
}


- (void)dealloc {
    [super dealloc];
}

@end

在GDB中:

(gdb) po [[Session sharedSession] myArray]
<NSCFArray 0x4710630>(
A,
B,
C
)

我使用3.2 iPhone SDK,使用默认项目模板,在调试模式下执行此操作,而不更改任何构建设置。我怀疑您的构建设置可能存在问题。我注意到4.0 beta版的调试是不可思议的。如果你使用4.0,请记住它仍然是测试版,你的问题可能真的是别人的问题。