Подтвердить что ты не робот

Xcode 3.2 Debug: Просмотр информации в массиве?

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

alt text

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

cheers gary

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

4b9b3361

Ответ 1

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

"{(int) [$ VAR count]} objects {(NSString *) [(NSArray *) $VAR description]}: s"

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

Ваши собственные переопределения сохраняются в "~/Library/Application Support/Developer/Shared/Xcode/CustomDataViews/CustomDataViews.plist", и если вы хотите, чтобы форматировщик данных по умолчанию Apple по умолчанию просто дважды щелкнул строку для переменной тот же тип и удалить все, что есть.

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

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

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

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

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

Ответ 2

В меню Run > Variables View в Xcode включен режим "Использовать форматы данных"?

Ответ 3

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

Приветствия,

Кевин