我有一个递归下降的树对象.我希望能够设置断点并在
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];
}