2008-09-22 20 views
83

¿Hay alguna manera de ver los pares clave/valor de una variable NSDictionary a través del depurador Xcode? Aquí está el alcance de la información cuando está completamente expandido en la ventana de variables:¿Cómo ver los contenidos de la variable NSDictionary en el depurador Xcode?

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

que estaba esperando que me mostrara cada elemento del diccionario (similar a una variable de matriz).

Respuesta

133

En la ventana de gdb puede usar po para inspeccionar el objeto.

dado:

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

establecer un punto de interrupción después de que los objetos se añaden puede inspeccionar lo que está en el diccionario

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

Por supuesto, estas son NSString objetos que imprimen muy bien. YMMV con otros objetos complejos.

+7

Hola! ¿Qué es gdb? ¿Qué es po? No estoy seguro de entender ... ¡Gracias por tu ayuda! :) – Martin

+1

Ok, descubrí que GDB significa depurador de GNU y de hecho es la ventana del depurador de Xcode.Ahora necesito encontrar lo que es po – Martin

+18

OK! Entonces, gdb es, de hecho, un mensaje en la consola, donde puede ingresar comandos. Al escribir "po object_name", obtiene el contenido del objeto impreso en la consola. – Martin

30

Puede hacer clic con el botón derecho en cualquier variable de objeto (ObjC o Core Foundation) y seleccionar "Imprimir descripción en la consola" (también en Ejecutar-> Vista de variables). Esto imprime el resultado del método -debugDescription del obejct, que por defecto llama al -description. Desafortunadamente, NSDictionary anula esto para producir un conjunto de datos internos que generalmente no te importan, por lo que en este caso específico, la solución de craigb es mejor.

Las claves y valores mostrados también usan -description, por lo que si desea información útil sobre sus objetos en colecciones y en cualquier otro lugar, anular -description es obligatorio. Yo por lo general ponerlo en práctica a lo largo de estas líneas, para que coincida con el formato de la aplicación por defecto NSObject:

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

Puede utilizar CFShow()

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

En la salida verá

{ 
    bar = foo; 
    buz = fiz; 
} 
0

También puede usar NSLog.

También puede ir en el área de depuración o xcode, luego averigüe All Variables, Registers, Globals and Statics y luego seleccione su variable. Haga clic derecho sobre él. A continuación, seleccione Print description of "...."

Espero que ayude!

3

XCode 4.6 ha añadido lo siguiente que puede ser útil para usted

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

Ahora se puede inspeccionar estos tipos de objetos sin tener que imprimir todo el objeto en la consola. ¡Disfrutar!

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

+0

Esto es un error para mí, solo muestra parte de mi NSDictionary –

0

Haga clic en su dict, a continuación, haga clic en el pequeño "i" icono, se debe hacer el trabajo :-) Xcode5, view the value of a dict

Cuestiones relacionadas