Можно ли остановиться на точке останова в экземпляре объекта? - PullRequest
1 голос
/ 27 июля 2011

Я попытался создать точку останова в определении класса, остановиться на сообщении, отправленном экземпляру объекта, надеясь, что оно затем перейдет к коду класса и позволит мне пройти по строке за строкой и увидеть значения локального переменные.

Однако я собираюсь выйти и сказать «нет, это не должно быть возможно» , поскольку в памяти может быть несколько экземпляров класса. Если бы кто-то мог дать лучшее объяснение, это было бы замечательно.

(Примечание: моя альтернатива - чрезмерное NSLogging данных времени выполнения.)

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

Да, это возможно! Вы можете добавить условие к точке останова:

http://d.pr/yZVB+ http://d.pr/pWOB+

Программа будет останавливаться на этой точке останова только тогда, когда условие выполнено. Вы можете выбрать условие, такое как self == _myGlobalInstanceOfInterest.

Если вы не хотите хранить экземпляр в переменной, вы можете, например, запустить точку останова без условия - и затем, когда вы выясните, какой экземпляр вам нужен, поскольку программа работает, используйте p myObject чтобы получить адрес, а затем просто установите условие для использования этого адреса (например, self == 0x8badf00d).

2 голосов
/ 27 июля 2011

Я так понимаю, вы хотите прервать сообщение, отправленное конкретному экземпляру?

Прочитайте документацию Xcode о точках останова и наблюдения. По сути, вы можете установить условие для точки останова, чтобы оно автоматически продолжалось, если self не тот экземпляр, который вас интересует.

1 голос
/ 27 июля 2011

Предполагая, что вы говорите о чем-то вроде этого:

- (void)eatAPieceOfFruit: (NSFruit *)fruit {
    NSString * fruitType = [fruit species];
    BOOL hasSeeds = [fruit hasSeeds];

    NSInteger deliciousnessRating = [self enjoymentOfFruitType: fruitType];
    NSString * reactionToEating = [self phraseForFruitType: fruitType];

    // Breakpoint set here

}

Отладчик имеет доступ и знает имя любой переменной, которая находится в области видимости - любой переменной, которую вы сможете использоватьФактический код в строке, где вы сломали, вы также можете получить через отладчик.Итак, в приглашении отладчика введите:

po reactionToEating

(это «po» для «объекта печати») или имя любой другой локальной переменной, чтобы увидеть, что это такое.Если вы хотите вызвать метод для объекта, который находится в области видимости, вы можете сделать это:

print (int)[reactionToEating length]
po [reactionToEating capitalizedString]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...