Come visualizzare i contenuti della variabile NSDictionary nel debugger Xcode?
-
02-07-2019 - |
Domanda
Esiste un modo per visualizzare le coppie chiave / valore di una variabile NSDictionary tramite il debugger Xcode? Ecco l'estensione delle informazioni quando sono completamente espanse nella finestra delle variabili:
Variable Value Summary
jsonDict 0x45c540 4 key/value pairs
NSObject {...}
isa 0xa06e0720
Mi aspettavo che mi mostrasse ogni elemento del dizionario (simile a una variabile di matrice).
Soluzione
Nella finestra di gdb puoi usare po
per ispezionare l'oggetto.
data ??p>
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
impostando un punto di interruzione dopo l'aggiunta degli oggetti è possibile ispezionare ciò che è nel dizionario
(gdb) po dict
{
bar = foo;
buz = fiz;
}
Naturalmente questi sono oggetti NSString
che stampano bene. YMMV con altri oggetti complessi.
Altri suggerimenti
Puoi fare clic con il pulsante destro del mouse su qualsiasi oggetto (ObjC o Core Foundation) e selezionare & # 8220; Stampa descrizione su console & # 8221; & nbsp; (anche nella vista Variabili di esecuzione). Questo stampa il risultato del metodo -debugDescription
obejct, che per impostazione predefinita chiama -description
. Sfortunatamente, NSDictionary
ha la precedenza su questo per produrre un mucchio di dati interni di cui di solito non ti preoccupi, quindi in questo caso specifico la soluzione di Craigb è migliore.
Le chiavi e i valori visualizzati usano anche -description
, quindi se vuoi informazioni utili sui tuoi oggetti in raccolte e altrove, è necessario sostituire -description
. In genere lo implemento in questo modo, in modo che corrisponda al formato dell'implementazione NSObject
predefinita:
-(NSString *) description { return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]]; }
Puoi usare CFShow ()
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);
In output vedrai
{
bar = foo;
buz = fiz;
}
XCode 4.6 ha aggiunto le seguenti funzionalità che potrebbero esserti utili
The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger
Ora puoi ispezionare questi tipi di oggetti senza dover stampare l'intero oggetto nella console. Buon divertimento!
Fai clic sul tuo dict, quindi fai clic sul piccolo " i " icona, dovrebbe fare il lavoro :-)
Puoi anche utilizzare NSLog .
Inoltre puoi andare nell'area Debug o xcode, quindi scoprire Tutte le variabili, i registri, i globuli e le statistiche
quindi selezionare la tua variabile. Fai clic destro su di esso. Quindi seleziona Stampa la descrizione di " .... "
Spero che sia d'aiuto!
Se desideri stamparli in un'azione di breakpoint nel moderno XCode (sì, sono 10 anni dopo il post originale!) usa la seguente espressione di breakpoint in un "Messaggio di log" " Azione:
@ myDictionary.description @
Di seguito è riportato uno screenshot della mia azione breakpoint in cui l'evento variabile è un NSString e la variabile contextData è NSDictionary di cui sto registrando il contenuto di: :