Как вы используете отладчик Xcode (lldb или gdb) для определения типа объектов, хранящихся в NSArray?Использование отладчика Xcode для определения типа объектов, хранящихся в NSArray
ответ
Другой способ сделать это в lldb является использование комбинации данных lldb в которые включают объекты NSArray как «реальные» массивы - и объект «динамический тип» в expr
- который вытаскивает реальные, а не объявленные типы объектов. Так, например:
(lldb) expr -T -d run-target -- *array1
(NSArray) $2 = {
(__NSCFConstantString *) [0] = 0x0000000100002590 @"array1 object1"
(__NSCFConstantString *) [1] = 0x00000001000025b0 @"array1 object2"
(__NSCFConstantString *) [2] = 0x00000001000025d0 @"array1 object3"
}
Опция -T
просто включен тип печати. Поставщик синтетических детей NSArray представляет массив как индексированный массив объектов. Это работает по умолчанию, мне не нужно было ничего делать, чтобы включить это. Опция динамического типа -d
декодирует реальный тип каждого объекта. Обратите внимание, что вы можете сделать найти динамический тип по умолчанию в lldb, выполнив:
(lldb) set set target.prefer-dynamic-value run-target
Этот массив, кажется, полон __NSCFConstantStrings, который, по-видимому тип подложки для постоянных NSStrings.
Оба gdb и lldb поддерживают методы вызова объектов в памяти, и вы можете распечатать объект с помощью po
. Чтобы получить список значений некоторого свойства для всех объектов в NSArray
, используйте valueForKey:
. Объект, который вас интересует, это class
.
Собираем все вместе:
po [theArray valueForKey:@"class"]
В Xcode 4.6 или более поздней версии, то Xcode UI покажет, что информация для вас