Отладка Xcode 3.2: Видя, что в массиве? - PullRequest
16 голосов
/ 15 сентября 2009

Во время отладки в Xcode_3.1.2 я почти уверен, что могу видеть содержимое моих массивов NSString. Однако после обновления до 3.2 я вижу только следующее ...

alt text

Я знаю, что могу напечатать объект в (gdb) с помощью "po planetArray" или просто нажать в отладчике и "напечатать описание на консоль". Мне просто любопытно, так как я уверен, что он работал до обновления. Кто-нибудь знает что-нибудь об этом?

Ура Гэри

edit: форматтер данных включен и показывает то, что вы видите выше ...

Ответы [ 3 ]

18 голосов
/ 15 октября 2009

Это потому, что GDB действует так, как будто переменная, которую вы просматриваете, находится вне области видимости, в то время как он действительно просто запутывается в том, что возвращает каждая функция функции или вызова метода средства форматирования данных (средство форматирования данных - это {{(unichar * *) ) Xcode_CFStringSummary ($ VAR, $ ID)}: s "часть, которую вы видите. Когда вы выполняете отладку и находитесь в методе, в котором вы знаете, что локальная переменная должна находиться в области действия, откройте окно отладчика и область, где вы можете увидеть заголовки столбцов «Переменная», «Значение» и «Сводка», дважды щелкните Запись строки «Сводка» для интересующей вас переменной и введите следующее (для типов массива, таких как NSArray или NSCFArray):

"{(int) [$ VAR count]} объекты {(NSString *) [(NSArray *) $ VAR описание]}: s"

затем нажмите возврат. Теперь вы перезаписали форматер данных по умолчанию, предоставляемый расширением GDB Xcode (его можно найти в различных списках в "/ Developer / Library / Xcode / CustomDataViews /"), с вашей собственной строкой форматера данных.

Ваши собственные переопределения сохраняются в «~ / Библиотека / Поддержка приложений / Разработчик / Общий / Xcode / CustomDataViews / CustomDataViews.plist», и если вы хотите вернуть форматировщик данных Apple по умолчанию обратно, просто дважды щелкните строку для переменной того же типа и удалите все, что есть.

Мельчайшие подробности: в пользовательском выражении выше конструкции "{}" говорит GDB выполнить команду (как если бы вы выполняли ее из командной строки отладчика GDB, что означает, что применяются те же ограничения: вам нужно указать тип возвращаемого значения в приведенных числах перед каждой функцией или методом, который возвращает что-либо). ": S" за закрывающей фигурной скобкой указывает Xcode и GDB ссылаться на столбец "Summary". Также допустимым будет «: v», которое ссылается на столбец «Значение», который в большинстве случаев является просто значением указателя. Все, что находится вне фигурных скобок, показывается дословно. К сожалению, фигурные скобки не могут быть вложенными, что делает недействительными условия троичного оператора.

Итак, с указанным выше форматером данных вы должны увидеть следующее для пустого NSArray:

"0 объектов (\ n)"

Если вы хотите написать свои собственные средства форматирования данных в качестве расширений GDB (эквивалентно указанию функции, подобной Xcode_CFStringSummary выше), вы можете сделать это. Взгляните на следующий заголовок: "/Developer/Applications/Xcode.app/Contents/PlugIns/GDBMIDebugging.xcplugin/Contents/Headers/DataFormatterPlugin.h"

он расскажет вам все, что вам нужно знать. Но может быть трудно понять это правильно. Может быть проще и менее подвержено ошибкам просто определить другой метод в вашем классе и вызвать его из строки форматера данных вместо «description».

4 голосов
/ 17 сентября 2009

В меню Выполнить> Представление переменных в XCode включено ли «Использовать средства форматирования данных»?

2 голосов
/ 14 октября 2009

Я не уверен, поможет ли это, но если вы выберите значение массива, которое хотите видеть в окне отладчика, и перейдите в Меню: Выполнить> Просмотр переменных> Просмотр переменной как Вы можете изменить его с «NSCFString *» на «NSString *». Затем вы увидите значение, например "Планета_1".

Приветствия

Kevin

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