我有一个递归下降的树对象。我希望能够设置断点并在Xcode调试器中检查它。检查顶级工作正常。但是在我降低一个级别之后,调试器说ivars的值超出了范围。有什么方法可以防止这种情况发生吗?
编辑:
回应评论 -
ivar是Class Expression的对象。嵌套主要来自body ivar,它通常是表达式对象的NSMutableArray。所以你可能有这样的结构:
-expression
---身体(2个表达)
----- 0表达
-------身体(1表达)
---------- 0表达式
------------身体[空]
----- 1表达
-------身体[空]
还有一个头部ivar,它是Token类的一个对象,后者又有一些字符串ivars,不会嵌套。
我使用调试器的方式 - 我在Expression对象内的方法中设置断点。然后我点击公开三角形的参数,然后点击自我,然后点击身体ivar,然后点击身体ivar中的表达式,依此类推。但最终调试器停止告诉我事物的价值。
答案 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];
}