Xcode调试器 - 检查深层嵌套的对象

时间:2010-10-04 15:47:24

标签: xcode debugging

我有一个递归下降的树对象。我希望能够设置断点并在Xcode调试器中检查它。检查顶级工作正常。但是在我降低一个级别之后,调试器说ivars的值超出了范围。有什么方法可以防止这种情况发生吗?

编辑:

回应评论 -

ivar是Class Expression的对象。嵌套主要来自body ivar,它通常是表达式对象的NSMutableArray。所以你可能有这样的结构:

-expression
---身体(2个表达)
----- 0表达
-------身体(1表达)
---------- 0表达式 ------------身体[空]
----- 1表达
-------身体[空]

还有一个头部ivar,它是Token类的一个对象,后者又有一些字符串ivars,不会嵌套。

我使用调试器的方式 - 我在Expression对象内的方法中设置断点。然后我点击公开三角形的参数,然后点击自我,然后点击身体ivar,然后点击身体ivar中的表达式,依此类推。但最终调试器停止告诉我事物的价值。

1 个答案:

答案 0 :(得分:2)

我建议将其添加到Expression课程中。然后,您可以在调试器中po [expression explode]打印表达式树。先决条件是-description类的正确Expression方法打印出其余的ivars。

- (void) explodeAtLevel:(int)aLevel {
    NSMutableString* out = [[NSMutableString alloc] init];

    for (int i = 0;  i < aLevel; i++) [out appendString:@"-"];

    [out appendString:self.description];
    printf("%s\n", [out UTF8String]);
    [out release];

    for (id *subitem in body)
      if ([subitem isMemberOfClass:[Expression class]])
        [((Expression*)subitem) explodeAtLevel:(aLevel + 1)];
}


- (void) explode {
  [self explodeAtLevel:0];
}