¿Cómo ver el contenido de la variable NSDictionary en el depurador de Xcode?

85

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

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

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

Dara Kong
fuente

Respuestas:

140

En la ventana de gdb puede utilizar popara 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 agregar los objetos, puede inspeccionar lo que está en el diccionario

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

Por supuesto, estos son NSStringobjetos que se imprimen muy bien. YMMV con otros objetos complejos.

craigb
fuente
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 GNU y de hecho es la ventana del depurador de Xcode. Ahora necesito encontrar lo que es po
Martin
18
¡OKAY! Entonces, gdb es de hecho un indicador en la consola, donde puede ingresar comandos. Al escribir "po object_name", se imprimió el contenido del objeto en la consola.
Martin
7
po es un alias para print-object
Brad Cupit
¡Maravilloso! Equivalente a "echo var_dump ()" o "print_r ()" en PHP.
mpemburn
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 -debugDescriptionmétodo del objeto, que por defecto llama -description. Desafortunadamente, NSDictionaryanula esto para producir un montón de datos internos que generalmente no le interesan, por lo que en este caso específico, la solución de craigb es mejor.

Las claves y valores mostrados también se utilizan -description, por lo que si desea información útil sobre sus objetos en colecciones y en otros lugares, la anulación -descriptiones imprescindible. Generalmente lo implemento de esta manera, para que coincida con el formato de la NSObjectimplementación predeterminada :

- (NSString *) descripción
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]];
}
Jens Ayton
fuente
6

Puede usar CFShow ()

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

En salida verás

{
  bar = foo;
  buz = fiz;
}
uranpro
fuente
1

Haga clic en su dict, luego haga clic en el pequeño icono "i", debería hacer el trabajo :-) Xcode5, ver el valor de un dictado

Taiko
fuente
1

Si desea imprimirlos en una acción de punto de interrupción en XCode moderno (sí, ¡estoy 10 años después de la publicación original!) Use la siguiente expresión de punto de interrupción en una acción de "Mensaje de registro":

@ myDictionary.description @

A continuación se muestra una captura de pantalla de mi acción de punto de interrupción donde el evento variable es un NSString y la variable contextData es el NSDictionary del que estoy registrando el contenido :

Palmadita
fuente
0

También puede utilizar NSLog .

También puede ir al área de depuración o xcode, luego averiguarlo y All Variables, Registers, Globals and Staticsluego seleccionar su variable. Haz clic derecho sobre él. Luego seleccionePrint description of "...."

¡Espero eso ayude!

usuario1873574
fuente