Wie kann ich den Inhalt der NSDictionary-Variablen im Xcode-Debugger anzeigen?

85

Gibt es eine Möglichkeit, die Schlüssel / Wert-Paare einer NSDictionary-Variablen über den Xcode-Debugger anzuzeigen? Hier ist der Umfang der Informationen, wenn sie im Variablenfenster vollständig erweitert sind:

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

Ich hatte erwartet, dass es mir jedes Element des Wörterbuchs zeigt (ähnlich einer Array-Variablen).

Dara Kong
quelle

Antworten:

140

Im GDB-Fenster können Sie podas Objekt untersuchen.

gegeben:

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

Wenn Sie nach dem Hinzufügen der Objekte einen Haltepunkt festlegen, können Sie überprüfen, was sich im Wörterbuch befindet

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

Natürlich sind dies NSStringObjekte, die gut drucken. YMMV mit anderen komplexen Objekten.

craigb
quelle
7
Hallo! Was ist gdb? Was ist po? Nicht sicher zu verstehen ... Danke für Ihre Hilfe! :)
Martin
1
Ok, also habe ich herausgefunden, dass GDB für GNU-Debugger steht und tatsächlich das Debugger-Fenster von Xcode ist. Jetzt muss ich herausfinden, was po ist
Martin
18
OK! GDB ist also eine Eingabeaufforderung in der Konsole, in die Sie Befehle eingeben können. Durch Eingabe von "po object_name" wird der Objektinhalt in der Konsole gedruckt.
Martin
7
po ist ein Alias ​​für
Druckobjekt
Wunderbar! Entspricht "echo var_dump ()" oder "print_r ()" in PHP.
mpemburn
30

Sie können mit der rechten Maustaste auf eine beliebige Objektvariable (ObjC oder Core Foundation) klicken und "Beschreibung an Konsole drucken" auswählen (auch in der Ansicht "Ausführen-> Variablen"). Dies gibt das Ergebnis der -debugDescriptionMethode des Objekts aus , die standardmäßig aufgerufen wird -description. NSDictionaryÜberschreibt dies leider, um eine Reihe interner Daten zu erstellen, die Sie im Allgemeinen nicht interessieren. In diesem speziellen Fall ist die Lösung von craigb also besser.

Die angezeigten Schlüssel und Werte werden ebenfalls verwendet -description. Wenn Sie also nützliche Informationen zu Ihren Objekten in Sammlungen und anderswo wünschen, ist das Überschreiben -descriptionein Muss. Ich implementiere es im Allgemeinen in diese Richtung, um es an das Format der Standardimplementierung NSObjectanzupassen:

- (NSString *) Beschreibung
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [Selbstklasse], Selbst, [Selbst foo]];
}}
Jens Ayton
quelle
6

Sie können CFShow () verwenden

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

In der Ausgabe sehen Sie

{
  bar = foo;
  buz = fiz;
}
uranpro
quelle
3

XCode 4.6 hat die folgenden Funktionen hinzugefügt, die für Sie hilfreich sein können

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

Jetzt können Sie diese Objekttypen überprüfen, ohne das gesamte Objekt in der Konsole drucken zu müssen. Genießen!

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

jkatzer
quelle
Dies ist fehlerhaft für mich - zeigt nur einen Teil meines NSDictionary
Paul Slocum
1

Klicken Sie auf Ihr Diktat und dann auf das kleine "i" -Symbol, es sollte den Job machen :-) Xcode5, zeigen Sie den Wert eines Diktats an

Taiko
quelle
1

Wenn Sie diese in einer Haltepunktaktion in modernem XCode drucken möchten (ja, ich bin 10 Jahre nach dem ursprünglichen Beitrag!), Verwenden Sie den folgenden Haltepunktausdruck in einer Aktion "Protokollnachricht":

@ myDictionary.description @

Unten ist ein Screenshot von meiner Unterbrechungsaktion , wo das Variable Ereignis ein NSString und die Variable contextData die NSDictionary ist , dass ich den Inhalt bin Anmeldung: :

Klopfen
quelle
0

Sie können auch NSLog verwenden .

Sie können auch in den Debug-Bereich oder in den xcode gehen, es herausfinden und All Variables, Registers, Globals and Staticsdann Ihre Variable auswählen. Klicken Sie mit der rechten Maustaste darauf. Dann wählen SiePrint description of "...."

Ich hoffe es hilft!

user1873574
quelle