Як переглянути вміст змінної 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 з іншими складними об'єктами.


7
Привіт! Що таке gdb? Що таке po? Не впевнений у розумінні ... Дякую за допомогу! :)
Мартін

1
Гаразд, я дізнався, що GDB розшифровується як налагоджувач GNU і насправді є вікном відладчика Xcode. Тепер мені потрібно знайти, що це
Мартін

18
В ПОРЯДКУ! Отже, gdb насправді є підказкою в консолі, де ви можете вводити команди. Набравши "po object_name", ви отримаєте вміст об'єкта, надрукований у консолі.
Мартін

7
po - це псевдонім для об'єкта друку
Бред Купіт

Чудово! Еквівалент "echo var_dump ()" або "print_r ()" у PHP.
mpemburn

30

Ви можете клацнути правою кнопкою миші будь-який змінний об’єкта (ObjC або Core Foundation) і вибрати “Print Description to Console” (також у меню Run-> Variables View). Це друкує результат -debugDescriptionметоду obejct , який за замовчуванням викликає -description. На жаль, NSDictionaryце перевизначає, щоб отримати купу внутрішніх даних, які, як правило, вам не цікаві, тому в цьому конкретному випадку рішення craigb є кращим.

Відображувані ключі та значення також використовують -description, тому якщо ви хочете отримати корисну інформацію про свої об’єкти у колекціях та інших місцях, перевизначення -descriptionє обов’язковим. Як правило, я реалізую його в таких напрямках, щоб відповідати формату реалізації за замовчуванням NSObject:

- (NSString *) опис
{
    повернути [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


Для мене це глючить - показує лише частину мого словника NSD
Пол Слокум

1

Клацніть на свій дикт, потім клацніть на маленький значок "i", він повинен виконати цю роботу :-) Xcode5, перегляньте значення дикту


1

Якщо ви хочете надрукувати їх у дії точки зупинку в сучасному XCode (так, мені 10 років після вихідної публікації!), Використовуйте такий вираз точки зупинки в дії "Повідомлення журналу":

@ myDictionary.description @

Нижче наведено знімок екрану моєї дії точки зупинку, де подія змінної - це NSString, а змінна contextData - NSD Dictionary, який я реєструю вмістом ::


0

Ви також можете використовувати NSLog .

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

Сподіваюся, це допоможе!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.