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

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

编辑:

回应评论 –

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

-表达
—身体(2个表达)
—– 0表达
——-身体(1表达)
———- 0表达
————身体[空]
—– 1表达
——-身体[空]

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

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

最佳答案 我建议将其添加到Expression类中.然后你可以在调试器中po [expression explode]来打印表达式的树.前提条件是Expressionclass的正确描述方法,它打印出其余的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];
}
点赞