Is there a way to view the key/value pairs of a NSDictionary variable through the Xcode debugger? Here's the extent of information when it is fully expanded in the variable window:
Variable Value Summary jsonDict 0x45c540 4 key/value pairs NSObject {...} isa 0xa06e0720
I was expecting it to show me each element of the dictionary (similar to an array variable).
Select a variable and click the Quick Look button to see a preview of the variable, click the Print Description button to print a description of the object in the console.
When you run an application in Xcode, the debugger is automatically started and attached to the process of the application. Click the Run button in the top left or press Command + R. From the moment the application is up and running, we can start inspecting the process and, if necessary, debug it.
1. NSDictionary is a so called class cluster. It uses concrete subclasses (like __NSDictionaryI for immutable implementations) to abstract away implementation details.
In the gdb window you can use po
to inspect the object.
given:
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; [dict setObject:@"foo" forKey:@"bar"]; [dict setObject:@"fiz" forKey:@"buz"];
setting a breakpoint after the objects are added you can inspect what is in the dictionary
(gdb) po dict { bar = foo; buz = fiz; }
Of course these are NSString
objects that print nicely. YMMV with other complex objects.
You can right-click any object (ObjC or Core Foundation) variable and select “Print Description to Console” (also in Run->Variables View). This prints the result the obejct’s -debugDescription
method, which by default calls -description
. Unfortunately, NSDictionary
overrides this to produce a bunch of internal data the you generally don’t care about, so in this specific case craigb’s solution is better.
The displayed keys and values also use -description
, so if you want useful information about your objects in collections and elsewhere, overriding -description
is a must. I generally implement it along these lines, to match the format of the default NSObject
implementation:
-(NSString *) description { return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]]; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With