Как просмотреть содержимое переменной NSDictionary в отладчике Xcode?

85

Есть ли способ просмотреть пары ключ / значение переменной NSDictionary через отладчик Xcode? Вот объем информации, когда он полностью развернут в окне переменных:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

Я ожидал, что он покажет мне каждый элемент словаря (аналогично переменной массива).

Дара Конг
источник

Ответы:

140

В окне GDB вы можете использовать poдля проверки объекта.

дано:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

установка точки останова после добавления объектов вы можете проверить, что находится в словаре

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

Конечно, это NSStringобъекты, которые хорошо печатаются. YMMV с другими сложными объектами.

Craigb
источник
7
Здравствуй! Что такое ГДБ? Что такое ПО? Не уверен, что понял ... Спасибо за помощь! :)
Мартин
1
Итак, я обнаружил, что GDB означает отладчик GNU и фактически является окном отладчика Xcode. Теперь мне нужно найти, что такое po
Мартин
18
ОК! Таким образом, gdb на самом деле является приглашением в консоли, где вы можете вводить команды. Набрав "po имя_объекта", вы напечатали содержимое объекта в консоли.
Мартин
7
po - это псевдоним для print-object
Брэд Купит,
Замечательно! Эквивалентен "echo var_dump ()" или "print_r ()" в PHP.
mpemburn
30

Вы можете щелкнуть правой кнопкой мыши любую переменную объекта (ObjC или Core Foundation) и выбрать «Печатать описание в консоль» (также в Run-> Variables View). Результат будет напечатан -debugDescriptionметодом объекта , который по умолчанию вызывает -description. К сожалению, он NSDictionaryпереопределяет это, чтобы создать кучу внутренних данных, которые вам обычно не нужны, поэтому в этом конкретном случае решение craigb лучше.

Отображаемые ключи и значения также используются -description, поэтому, если вам нужна полезная информация о ваших объектах в коллекциях и в других местах, переопределение -descriptionявляется обязательным. Я обычно реализую это в следующих строках, чтобы соответствовать формату реализации по умолчанию NSObject:

- (NSString *) описание
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [собственный класс], self, [self foo]];
}
Йенс Эйтон
источник
6

Вы можете использовать CFShow ()

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

На выходе вы увидите

{
  bar = foo;
  buz = fiz;
}
уранпро
источник
3

XCode 4.6 добавил следующие функции, которые могут быть вам полезны.

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

Теперь вы можете проверять эти типы объектов, не печатая весь объект в консоли. Наслаждайтесь!

Источник: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html.

Jkatzer
источник
Для меня это глючит
Пол Слокум
1

Нажмите на свой dict, затем нажмите на маленький значок «i», он должен сработать :-) Xcode5, просмотреть значение dict

Тайко
источник
1

Если вы хотите напечатать их в действии точки останова в современном XCode (да, я на 10 лет позже исходного сообщения!), Используйте следующее выражение точки останова в действии «Сообщение журнала»:

@ myDictionary.description @

Ниже приведен снимок экрана моего действия точки останова, где событие переменной - это NSString, а переменная contextData - это NSDictionary, содержимое которого я регистрирую :

Пэт
источник
0

Вы также можете использовать NSLog .

Также вы можете перейти в область отладки или xcode, затем узнать и All Variables, Registers, Globals and Staticsвыбрать свою переменную. Щелкните по нему правой кнопкой мыши. Затем выберитеPrint description of "...."

Надеюсь, это поможет!

user1873574
источник