Comment afficher le contenu de la variable NSDictionary dans le débogueur Xcode?
-
02-07-2019 - |
Question
Est-il possible d'afficher les paires clé / valeur d'une variable NSDictionary via le débogueur Xcode? Voici l'étendue des informations lorsqu'elles sont complètement développées dans la fenêtre de la variable:
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 (semblable à une variable de tableau).
La solution
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éfinissant un point d'arrêt après l'ajout des objets, vous pouvez consulter le contenu du dictionnaire
(gdb) po dict
{
bar = foo;
buz = fiz;
}
Bien sûr, ce sont des objets NSString
qui s’impriment bien. YMMV avec d'autres objets complexes.
Autres conseils
Vous pouvez cliquer avec le bouton droit de la souris sur toute variable d'objet (ObjC ou Core Foundation) et sélectionner "Imprimer la description sur la console" (également dans la vue des variables Exécuter). Ceci affiche le résultat obtenu avec la méthode -debugDescription
de l'objet, qui appelle par défaut -description
. Malheureusement, NSDictionary
l'ignore pour produire une série de données internes qui ne vous intéressent généralement pas. Par conséquent, dans ce cas précis, la solution de craigb est préférable.
Les clés et les valeurs affichées utilisent également -description
. Par conséquent, si vous souhaitez des informations utiles sur vos objets dans les collections et ailleurs, il est impératif de remplacer -description
. Je l'implémente généralement selon ces lignes, pour correspondre au format de l'implémentation par défaut de NSObject
:
-(NSString *) description { return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]]; }
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;
}
XCode 4.6 a ajouté les fonctionnalités suivantes qui pourraient vous être utiles
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'intégralité de l'objet dans la console. Profitez!
Cliquez sur votre dict, puis cliquez sur le petit " i " icône, il devrait faire le travail :-)
Vous pouvez également utiliser NSLog .
Vous pouvez également aller dans la zone de débogage ou dans le xcode, puis rechercher Toutes les variables, registres, globes et statiques
, puis sélectionner votre variable. Faites un clic droit dessus. Sélectionnez ensuite Imprimer la description de "...."
J'espère que ça aide!
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 originale!), utilisez l'expression de point d'arrêt suivante dans un "Message de journal". action:
@ myDictionary.description @
Ci-dessous, une capture d'écran de mon action de point d'arrêt où l'événement de variable est une chaîne NSString et la variable contextData est le NSDictionary dont je suis en train de consigner le contenu: :