Come visualizzare il contenuto della variabile NSDictionary nel debugger Xcode?


85

Esiste un modo per visualizzare le coppie chiave / valore di una variabile NSDictionary tramite il debugger Xcode? Ecco l'estensione delle informazioni quando è completamente espansa 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).

Risposte:


140

Nella finestra gdb puoi usare poper ispezionare l'oggetto.

dato:

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

impostando un punto di interruzione dopo che gli oggetti sono stati aggiunti è possibile esaminare cosa c'è nel dizionario

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

Ovviamente questi sono NSStringoggetti che si stampano bene. YMMV con altri oggetti complessi.


7
Ciao! Cos'è gdb? Cos'è il po? Non sono sicuro di capire ... Grazie per il tuo aiuto! :)
Martin

1
Ok, quindi ho scoperto che GDB sta per GNU debugger ed è in effetti la finestra del debugger di Xcode. Ora ho bisogno di trovare cos'è po
Martin

18
OK! Quindi gdb è in effetti un prompt nella console, dove puoi inserire comandi. Digitando "po nome_oggetto" hai stampato il contenuto dell'oggetto nella console.
Martin

7
po è un alias per oggetto di stampa
Brad Cupit

Meraviglioso Equivalente a "echo var_dump ()" o "print_r ()" in PHP.
mpemburn

30

È possibile fare clic con il pulsante destro del mouse su qualsiasi variabile oggetto (ObjC o Core Foundation) e selezionare "Stampa descrizione su console" (anche in Esegui-> Vista variabili). Questo stampa il risultato del -debugDescriptionmetodo obejct , che per impostazione predefinita chiama -description. Sfortunatamente, NSDictionarysovrascrive questo per produrre un mucchio di dati interni che generalmente non ti interessano, quindi in questo caso specifico la soluzione di craigb è migliore.

Anche le chiavi ei valori visualizzati vengono utilizzati -description, quindi se desideri informazioni utili sui tuoi oggetti nelle raccolte e altrove, -descriptionè necessario eseguire l'override . Generalmente lo implemento seguendo queste linee, per abbinare il formato dell'implementazione predefinita NSObject:

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

6

Puoi usare CFShow ()

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

In uscita vedrai

{
  bar = foo;
  buz = fiz;
}

3

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. Godere!

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


Questo è un bug per me - mostra solo una parte del mio NSDictionary
Paul Slocum

1

Fai clic sul tuo dict, quindi fai clic sulla piccola icona "i", dovrebbe funzionare :-) Xcode5, visualizza il valore di un dict


1

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'azione "Log Message":

@ myDictionary.description @

Di seguito è riportato uno screenshot della mia azione del punto di interruzione in cui l'evento variabile è un NSString e la variabile contextData è l'NSDictionary di cui sto registrando il contenuto ::


0

Puoi anche usare NSLog .

Inoltre puoi andare nell'area Debug o xcode, quindi scoprire All Variables, Registers, Globals and Staticse selezionare la tua variabile. Fare clic destro su di esso. Quindi selezionaPrint description of "...."

Spero che sia d'aiuto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.