Есть ли способ просмотреть пары ключ / значение переменной NSDictionary через отладчик Xcode? Вот объем информации, когда он полностью развернут в окне переменных:
Variable Value Summary
jsonDict 0x45c540 4 key/value pairs
NSObject {...}
isa 0xa06e0720
Я ожидал, что он покажет мне каждый элемент словаря (аналогично переменной массива).





В окне 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 с другими сложными объектами.
Итак, я обнаружил, что GDB означает отладчик GNU и фактически является окном отладчика Xcode. Теперь мне нужно найти то, что есть по
OK! Таким образом, gdb на самом деле является приглашением в консоли, где вы можете вводить команды. Набрав «po имя_объекта», вы напечатали содержимое объекта в консоли.
po - это псевдоним для объекта печати
Чудесно! Эквивалентен «echo var_dump ()» и «print_r ()» в PHP.
У меня есть файл формата JSON, я использовал NSJSONSerialization для этого файла и хранится в NSDictionary, как я могу просматривать объекты в словаре
Спасибо, что прокомментировали, что означают gdb и po, @Martin.
итак .... это все еще предпочтительный способ сделать это? Я думаю об IDE, таких как Eclipse, которые красиво выводят значения для всех общедоступных членов объекта прямо в панель переменных. эта функция требует ввода команды в Xcode?
С Xcode 4 вы в значительной степени получаете то, что указано выше (т.е. панель консоли отладчика теперь работает на lldb, а не на gdb), а также можете получить всплывающую подсказку, показывающую значения объектов, если вы наводите курсор на рассматриваемую переменную. Xcode - это не мое обычное дело, поэтому я не помню, была ли всплывающая подсказка новой или когда она могла быть добавлена.
Вы также можете поместить po obj в точку останова, а затем продолжить процесс автоматически после точки останова. Таким образом, вам не придется каждый раз останавливаться и набирать текст.
Вы можете щелкнуть правой кнопкой мыши любую переменную объекта (ObjC или Core Foundation) и выбрать «Печатать описание в консоль» (также в Run-> Variables View). Это напечатает результат метода -debugDescription объекта, который по умолчанию вызывает -description. К сожалению, NSDictionary переопределяет это, чтобы создать кучу внутренних данных, которые вам обычно не нужны, поэтому в этом конкретном случае решение Craigb лучше.
Отображаемые ключи и значения также используют -description, поэтому, если вам нужна полезная информация о ваших объектах в коллекциях и в других местах, переопределение -description является обязательным. Обычно я реализую его в следующих направлениях, чтобы соответствовать формату реализации NSObject по умолчанию:
-(NSString *) description
{
return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}Вы можете использовать CFShow ()
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);
На выходе вы увидите
{
bar = foo;
buz = fiz;
}
Вы также можете использовать NSLog.
Также вы можете перейти в область отладки или xcode, затем найти All Variables, Registers, Globals and Statics и выбрать свою переменную. Щелкните по нему правой кнопкой мыши. Затем выберите Print description of "...."
Надеюсь, это поможет!
XCode 4.6 добавил следующие функции, которые могут быть вам полезны.
The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger
Теперь вы можете проверить эти типы объектов, не печатая весь объект в консоли. Наслаждаться!
Для меня это ошибка - показывает только часть моего NSDictionary
Нажмите на свой dict, затем нажмите на маленький значок «i», он должен сработать :-)

Если вы хотите распечатать их в действии точки останова в современном XCode (да, я на 10 лет позже исходного сообщения!), Используйте следующее выражение точки останова в действии «Сообщение журнала»:
@ myDictionary.description @
Ниже приведен снимок экрана моего действия точки останова, где событие переменной - это NSString, а переменная contextData - это NSDictionary, содержимое которого я регистрирую:
:
Здравствуй! Что такое ГДБ? Что такое ПО? Не уверен, что понял ... Спасибо за помощь! :)