Отладчик Xcode - осмотрите глубоко вложенный объект - PullRequest
4 голосов
/ 04 октября 2010

У меня есть объект дерева рекурсивного спуска. Я хочу иметь возможность установить точку останова и проверить ее в отладчике XCode. Осмотр верхнего уровня работает просто отлично. Но после того, как я опускаюсь на уровень или около того, отладчик говорит, что значения иваров выходят за рамки. Можно ли как-нибудь предотвратить это?

EDIT:

В ответ на комментарий -

Ивар является объектом класса Expression. Вложение в основном происходит из тела ivar, которое обычно является NSMutableArray объектов выражения. Таким образом, у вас может быть такая структура:

-Expression
--- тело (2 выражения)
----- 0 Выражение
------- тело (1 выражение)
---------- 0 Выражение
------------ тело [пусто]
----- 1 выражение
------- тело [пусто]

Существует также главный ивар, который является объектом класса Token, который, в свою очередь, имеет несколько строковых иваров, не гнездящихся.

То, как я использую отладчик - я устанавливаю точку останова в методе внутри объекта Expression. Затем я нажимаю на раскрывающий треугольник для аргументов, затем для себя, затем для тела ivar, затем для выражений внутри тела ivar и так далее. Но в конце концов отладчик перестает рассказывать мне о вещах.

1 Ответ

2 голосов
/ 13 октября 2010

Я рекомендую добавить это в ваш 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...