Jak wyświetlić zawartość zmiennej NSDictionary w debugerze Xcode?

85

Czy istnieje sposób, aby wyświetlić pary klucz / wartość zmiennej NSDictionary za pomocą debugera Xcode? Oto zakres informacji po całkowitym rozwinięciu w oknie zmiennej:

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

Spodziewałem się, że pokaże mi każdy element słownika (podobnie jak zmienna tablicowa).

Dara Kong
źródło

Odpowiedzi:

140

W oknie gdb możesz posprawdzić obiekt.

dany:

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

ustawiając punkt przerwania po dodaniu obiektów, możesz sprawdzić, co jest w słowniku

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

Oczywiście są to NSStringobiekty, które ładnie się drukują. YMMV z innymi złożonymi obiektami.

Craigb
źródło
7
Cześć! Co to jest GDB? Co to jest po? Nie jestem pewien, czy rozumiesz ... Dziękuję za pomoc! :)
Martin
1
Ok, więc dowiedziałem się, że GDB oznacza debugger GNU i jest w rzeczywistości oknem debuggera Xcode. Teraz muszę znaleźć to, co jest po
Martin.
18
OK! Tak więc gdb jest w rzeczywistości monitem w konsoli, w którym można wprowadzać polecenia. Wpisując „po nazwa_obiektu” otrzymałeś zawartość obiektu wydrukowaną w konsoli.
Martin
7
po to alias dla print-object
Brad Cupit
Wspaniale! Odpowiednik „echo var_dump ()” lub „print_r ()” w PHP.
mpemburn
30

Możesz kliknąć prawym przyciskiem myszy dowolną zmienną obiektu (ObjC lub Core Foundation) i wybrać „Drukuj opis do konsoli” (również w widoku Run-> Variables). Wypisuje wynik -debugDescriptionmetody obiektu, która domyślnie wywołuje -description. Niestety, NSDictionaryzastępuje to, aby utworzyć zbiór danych wewnętrznych, na których generalnie się nie obchodzi, więc w tym konkretnym przypadku rozwiązanie Craigb jest lepsze.

Wyświetlane klucze i wartości również są używane -description, więc jeśli chcesz uzyskać przydatne informacje o swoich obiektach w kolekcjach i innych miejscach, nadpisanie -descriptionjest koniecznością. Generalnie wdrażam to w następujący sposób, aby dopasować format domyślnej NSObjectimplementacji:

- (NSString *) opis
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]];
}
Jens Ayton
źródło
6

Możesz użyć CFShow ()

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

Na wyjściu zobaczysz

{
  bar = foo;
  buz = fiz;
}
uranpro
źródło
3

XCode 4.6 dodał następującą funkcjonalność, która może być pomocna

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

Teraz możesz sprawdzić te typy obiektów bez konieczności drukowania całego obiektu w konsoli. Cieszyć się!

Źródło: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

jkatzer
źródło
To dla mnie buggy - pokazuje tylko część mojego NSDictionary
Paul Slocum
1

Kliknij swoją dyktę, a następnie kliknij małą ikonę „i”, powinno wystarczyć :-) Xcode5, wyświetl wartość dict

Taiko
źródło
1

Jeśli chcesz wydrukować je w akcji punktu przerwania w nowoczesnym XCode (tak, jestem 10 lat po oryginalnym wpisie!), Użyj następującego wyrażenia punktu przerwania w akcji „Komunikat dziennika”:

@ myDictionary.description @

Poniżej znajduje się zrzut ekranu mojej akcji punktu przerwania, w którym zdarzenie zmiennej jest NSString, a zmienna contextData to NSDictionary, w którym rejestruję zawartość :

Poklepać
źródło
0

Możesz także użyć NSLog .

Możesz także przejść do obszaru debugowania lub xcode, a następnie dowiedzieć się, All Variables, Registers, Globals and Staticsa następnie wybrać zmienną. Kliknij go prawym przyciskiem myszy. Następnie wybierzPrint description of "...."

Mam nadzieję, że to pomoże!

user1873574
źródło