Comment afficher le contenu de la variable NSDictionary dans le débogueur Xcode?

85

Existe-t-il un moyen d'afficher les paires clé / valeur d'une variable NSDictionary via le débogueur Xcode? Voici l'étendue des informations lorsqu'elles sont entièrement développées dans la fenêtre des variables:

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

Je m'attendais à ce qu'il me montre chaque élément du dictionnaire (similaire à une variable de tableau).

Dara Kong
la source

Réponses:

140

Dans la fenêtre gdb, vous pouvez utiliser popour inspecter l'objet.

donné:

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

définition d'un point d'arrêt après l'ajout des objets, vous pouvez inspecter ce qui se trouve dans le dictionnaire

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

Bien sûr, ce sont des NSStringobjets qui s'impriment bien. YMMV avec d'autres objets complexes.

Craigb
la source
7
Salut! Qu'est-ce que gdb? Qu'est-ce que po? Je ne suis pas sûr de comprendre ... Merci pour votre aide! :)
Martin
1
Ok donc j'ai découvert que GDB signifie débogueur GNU et est en fait la fenêtre de débogage de Xcode. Maintenant, j'ai besoin de trouver ce qui est po
Martin
18
D'ACCORD! Donc gdb est en fait une invite dans la console, où vous pouvez saisir des commandes. En tapant "po nom_objet", vous obtenez le contenu de l'objet imprimé dans la console.
Martin
7
po est un alias pour print-object
Brad Cupit
Formidable! Equivalent à "echo var_dump ()" ou "print_r ()" en PHP.
mpemburn
30

Vous pouvez cliquer avec le bouton droit sur n'importe quelle variable d'objet (ObjC ou Core Foundation) et sélectionner «Imprimer la description sur la console» (également dans la vue Exécuter-> Variables). Cela imprime le résultat de la -debugDescriptionméthode de l'obejct , qui appelle par défaut -description. Malheureusement, NSDictionarycela remplace cela pour produire un tas de données internes dont vous ne vous souciez généralement pas, donc dans ce cas précis, la solution de craigb est meilleure.

Les clés et valeurs affichées utilisent également -description, donc si vous voulez des informations utiles sur vos objets dans les collections et ailleurs, le remplacement -descriptionest un must. Je l'implémente généralement en suivant ces lignes, pour correspondre au format de l' NSObjectimplémentation par défaut :

- (NSString *) description
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]];
}
Jens Ayton
la source
6

Vous pouvez utiliser CFShow ()

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

En sortie, vous verrez

{
  bar = foo;
  buz = fiz;
}
uranpro
la source
3

XCode 4.6 a ajouté la fonctionnalité suivante qui peut vous être utile

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

Vous pouvez maintenant inspecter ces types d'objet sans avoir à imprimer l'objet entier dans la console. Prendre plaisir!

Source: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

jkatzer
la source
C'est buggy pour moi - ne montre qu'une partie de mon NSDictionary
Paul Slocum
1

Cliquez sur votre dict, puis cliquez sur la petite icône "i", cela devrait faire l'affaire :-) Xcode5, afficher la valeur d'un dict

Taiko
la source
1

Si vous souhaitez les imprimer dans une action de point d'arrêt dans XCode moderne (oui, je suis 10 ans après la publication d'origine!), Utilisez l'expression de point d'arrêt suivante dans une action "Log Message":

@ myDictionary.description @

Vous trouverez ci-dessous une capture d'écran de mon action de point d'arrêt où l'événement variable est une NSString et la variable contextData est le NSDictionary dont je consigne le contenu ::

Tapoter
la source
0

Vous pouvez également utiliser NSLog .

Vous pouvez également aller dans la zone de débogage ou xcode, puis découvrir All Variables, Registers, Globals and Staticspuis sélectionner votre variable. Faites un clic droit dessus. Puis sélectionnezPrint description of "...."

J'espère que cela aide!

user1873574
la source