2013-05-15 3 views

ответ

1

Другой способ сделать это в 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.

5

Оба gdb и lldb поддерживают методы вызова объектов в памяти, и вы можете распечатать объект с помощью po. Чтобы получить список значений некоторого свойства для всех объектов в NSArray, используйте valueForKey:. Объект, который вас интересует, это class.

Собираем все вместе:

po [theArray valueForKey:@"class"] 
1

В Xcode 4.6 или более поздней версии, то Xcode UI покажет, что информация для вас