2008-09-22 5 views
83

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'il est complètement étendu dans la fenêtre variable:Comment afficher le contenu de la variable NSDictionary dans le débogueur Xcode?

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

Je me attendais à me montrer chaque élément du dictionnaire (similaire à une variable tableau).

Répondre

133

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

donné:

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

définir un point d'arrêt après que les objets sont ajoutés, vous pouvez consulter ce qui est dans le dictionnaire

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

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

+7

Salut! Qu'est-ce que gdb? Qu'est-ce que po? Pas sûr de comprendre ... Merci pour votre aide! :) – Martin

+1

Ok, donc j'ai découvert que GDB est synonyme de débogueur GNU et est en fait la fenêtre de débogage de Xcode.Maintenant, je dois trouver ce qui est – Martin

+18

OK! Donc, gdb est en fait une invite dans la console, où vous pouvez entrer des commandes. En tapant "po nom_objet", le contenu de l'objet est imprimé dans la console. – Martin

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 de la console" (également dans Run-> Vue des variables). Ceci imprime le résultat de la méthode -debugDescription de l'obejct, qui appelle par défaut -description. Malheureusement, NSDictionary supplante ceci 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 les valeurs affichées utilisent également -description, donc si vous voulez des informations utiles sur vos objets dans les collections et ailleurs, il est indispensable de surcharger -description. Je mets en œuvre généralement le long de ces lignes, pour correspondre au format de la valeur par défaut NSObject mise en œuvre:

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

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; 
} 
0

Vous pouvez également utiliser NSLog.

Aussi vous pouvez aller dans la zone de débogage ou xcode, puis découvrez All Variables, Registers, Globals and Statics puis sélectionnez votre variable. Faites un clic droit dessus. Puis sélectionnez Print description of "...."

Espérons que ça aide!

3

XCode 4.6 a ajouté les fonctionnalités suivantes qui peuvent vous être utiles

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

Maintenant, vous pouvez vérifier ces types d'objets sans avoir à imprimer tout l'objet dans la console. Prendre plaisir!

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

+0

Ceci est buggé pour moi - montre seulement une partie de mon NSDictionary –

0

Cliquez sur votre dict, puis cliquez sur la petite icône "i", il devrait faire le travail :-) Xcode5, view the value of a dict

Questions connexes