Xcode Debugger: ver el valor de la variable

Mi código en un UITableViewController:

delegate.myData = [myData objectAtIndex:indexPath.row]; 

¿Cómo puedo ver los valores de delegate.myData o indexPath.row en el depurador? delegate.myData debe ser una matriz y indexPath.row un int . Solo puedo ver las direcciones de memory de los objects delegate e indexPath pero ¿dónde están myData y la row ?

texto alternativo

Verifique cómo ver el contenido de la variable NSDictionary en Xcode debugger?

Yo también uso

 po variableName print variableName 

en la console

En su caso es posible ejecutar

 print [myData objectAtIndex:indexPath.row] 

o

 po [myData objectAtIndex:indexPath.row] 

También puedes:

  1. Establezca un punto de interrupción para detener la ejecución.
  2. El object debe estar dentro del scope de ejecución
  3. Mueva el puntero del mouse sobre el object o la variable
  4. Aparecerá una información sobre herramientas amarilla.
  5. Mueva el mouse sobre la información sobre herramientas.
  6. Haga clic sobre las dos pequeñas flechas apuntando hacia arriba y hacia abajo
  7. Aparecerá un menu contextual
  8. Seleccione "Descripción de printing", ejecutará una [descripción de object]
  9. La descripción aparecerá en la salida de la console.

En mi humilde opinión un poco oculto e incómodo …

Estoy de acuerdo con otros carteles que Xcode como un entorno de desarrollo debe include una manera fácil de depurar variables. Bueno, buenas noticias, ¡hay una!

Después de search y no encontrar una respuesta simple / tutorial sobre cómo depurar variables en Xcode, fui a explorar con Xcode y encontré este descubrimiento (al less para mí) muy útil.

Cómo depurar fácilmente tus variables en Xcode 4.6.3

En la pantalla principal de Xcode, asegúrese de ver el área de debugging inferior haciendo clic en el button de la esquina superior derecha que se muestra en la captura de pantalla.

Botón de zona de depuración

Área de depuración en Xcode 4.6.3

Ahora establezca un punto de interrupción: la línea en el código donde desea que su progtwig se detenga haciendo clic en el borde de su área de código.

Punto de ruptura

Ahora en el área de debugging, busque estos botones y click el que está en el medio. Notarás que tu área ahora está dividida en dos.

Área de depuración dividida

Debería verse así

Ahora ejecute su request.

Cuando se alcanza el primer punto de interrupción durante la ejecución de su progtwig, verá en el lado izquierdo todas las variables disponibles en ese punto de interrupción.

Campo de búsqueda

Puede ampliar las flechas de la izquierda en la variable para get un mayor detalle. E incluso use el campo de búsqueda para aislar la variable que desea y ver que cambia en time real a medida que "entra" en el scope del punto de interrupción.

Entrar en

En el lado derecho de su área de debugging, puede enviar para imprimir las variables como desee utilizando el button derecho del mouse sobre la variable deseada.

Menú contextual

Como puede ver, ese menu contextual está lleno de opciones de debugging muy interesantes. Tal como Watch que ya ha sido sugerido con commands tipeados o incluso Editar valor … ¡ que cambia el valor de time de ejecución de su variable!

Ok, espero que esto te haya ayudado. Por favor, ¡Vota!

Su confusión se deriva del hecho de que las properties declaradas no son (necesariamente son nombradas como) variables (instancia).

La expresion

 indexPath.row 

es equivalente a

 [indexPath row] 

y la tarea

 delegate.myData = [myData objectAtIndex:indexPath.row]; 

es equivalente a

 [delegate setMyData:[myData objectAtIndex:[indexPath row]]]; 

suponiendo nombres estándar para las properties sintetizadas.

Además, el delegate probablemente sea declarado de tipo id<SomeProtocol> , es decir, el comstackdor no ha podido proporcionar información de tipo real para el delegate en ese punto, y el depurador confía en la información proporcionada en el momento de la compilation. Como id es un tipo genérico, no hay información de time de compilation sobre las variables de instancia en delegate .

Esas son las razones por las que no ves myData o row como variables.

Si desea inspeccionar el resultado del envío de -row o -myData , puede usar los commands p o po :

 p (NSInteger)[indexPath row] po [delegate myData] 

o use la window de expresiones (por ejemplo, si sabe que su delegate es de tipo real MyClass * , puede agregar un (MyClass *)delegate expresión (MyClass *)delegate , o hacer clic con el button derecho en delegate , elegir View Value as… e ingresar el tipo real de delegate (por ejemplo, MyClass * ).

Dicho esto, estoy de acuerdo en que el depurador podría ser más útil:

  • Podría haber una opción para decirle a la window del depurador que use información de tipo de time de ejecución en lugar de información de time de compilation. Ralentizaría el depurador, concedido, pero proporcionaría información útil;

  • Las properties declaradas pueden aparecer en un grupo llamado properties y permitir la inspección (opcional) directamente en la window del depurador. Esto también ralentizaría el depurador debido a la necesidad de enviar un post / ejecutar un método para get información, pero también proporcionaría información útil.

Puede imprimir valores en la window de la console en time de ejecución. A continuación se detallan los pasos:

  1. Coloque un punto de ruptura para el que desea get valores
  2. Ahora realice debugging paso a paso.
  3. Coloque un cursor en la variable / delegado cuyo valor se debe verificar en time de ejecución.
  4. Ahora esto mostrará la descripción de la variable / delegado
  5. Al hacer clic en "i", se mostrará una descripción detallada.
  6. Esto también imprime detalles en la window de la console.

Captura de pantalla para imprimir detalles en la ventana de la consola

Esto se pone un poco complicado. Estos objects son classs o estructuras personalizadas, y mirar dentro de ellos no es tan fácil en Xcode como en otros entornos de desarrollo.

Si yo fuera usted, NS NSLog los valores que desea ver, con alguna descripción.

es decir:

 NSLog(@"Description of object & time: %i", indexPath.row); 

Pruebe Ejecutar-> Mostrar-> Expresiones

Ingrese el nombre de la matriz o lo que esté buscando.