Это потому, что 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».