Как я могу просмотреть значения внутри объекта в отладчике XCode? - PullRequest
34 голосов
/ 11 августа 2010

Я знаю, что это может звучать глупо, поскольку в большинстве современных сред IDE это тривиальная функция, но я углубляюсь в разработку под iOS, знакомлюсь с платформой и SDK и не могу этого понять. У меня большой опыт работы с MS Visual Studio, и я вижу, что XCode работает почти так же, хотя ему по-прежнему не хватает функциональности по сравнению с ним, но все еще очень хорошая IDE. Когда дело доходит до отладки, XCode работает очень похоже на Visual Studio в том, что вы можете навести указатель мыши на переменную, и она отобразит ее текущее значение. Однако, когда дело доходит до переменных объекта, он почти всегда дает только адрес вместе со стрелкой расширения, которая расширяется до «NSObject», который расширяется до «isa», который распространяется на все атрибуты, которые ничего мне не говорят. Я привык к IDE, как Visual Studio, достаточно умный, чтобы сделать некоторый самоанализ и отобразить для меня реальный объект и все его непосредственные свойства и значения. Я предполагаю, что XCode достаточно умен, чтобы сделать это, и я просто не использую его правильно.

Если я установил точку останова в строке кода, которая включает экземпляр объекта (скажем, экземпляр NSDateComponents), как я могу просмотреть значения его свойств (то есть год, неделя, день, час и т. Д.)?

Заранее спасибо за помощь!

Редактировать: Вот скриншот информации, которую я получаю с каждым проверяемым объектом ... альтернативный текст http://joecrotchett.com/images/misc/example.jpg

Ответы [ 5 ]

31 голосов
/ 12 августа 2010

Это расстраивает.Отладчик должен знать структуру каждого объекта, и он, очевидно, не знает.Хотя раньше было намного хуже.Как и в случае с NSArray, они представляют собой массив объектов.Отладчик не знает, какой именно тип объектов, и это связано с языком Objective-C, а не отладчиком.

Когда вы погрузитесь в разработку для iOS, я думаю, вы обнаружите, что Apple на 15 лет отстает от своих конкурентов в разработке.Это не шутка.Но они догоняют и, поверьте мне, раньше было намного хуже!

5 голосов
/ 13 июля 2012

Для своих объектов данных я склонен перезаписывать метод description и выводить строку со сводкой объекта.Примерно так:

Printing description of myContact:
{name=Homer, lastname=Simpson, ...}

Это означает, что вы можете быстро осмотреть объект в отладчике или когда вы NSLog выведите его на консоль.Если это описание содержит все соответствующие данные, вы также можете перезаписать isEqual:, чтобы оно использовало описание для сравнения двух объектов.

3 голосов
/ 08 февраля 2014

Вы также можете изменить способ, которым Xcode отображает значение в области локальных переменных, перейдя в «Редактировать формат резюме» в меню правой кнопки мыши.

Например, чтобы он вызывал метод description, вы должны установить его на

{(NSString*)[$VAR description]}:s

Несколько подробностей здесь: понимание отладчика Xcode var display

2 голосов
/ 11 августа 2010

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

Вы также можете напечатать его значение «описание». Двигайте указатель немного вправо, пока он не окажется над двумя маленькими стрелками «вверх / вниз». Затем левый (ну, «основной») клик. Появится всплывающее окно, и одним из вариантов будет «Распечатать описание». Если вы нажмете на это, он выведет вывод своего метода -description на консоль.

1 голос
/ 25 ноября 2016

Ну, прошло еще пару лет, и xcode по-прежнему показывает isa = (Class) на большинстве объектов вместо того, чтобы выяснить, что это за объект.

И даже эта параПрошло много лет, и Apple все еще отстает, потому что конкуренция обвивает их (а сейчас они отстают от конкурентов на 16 лет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...