2009-04-12 20 views
17

Tengo una acción de punto de interrupción y estoy usando la opción de registro en el menú desplegable. Me gustaría imprimir el valor de la cadena (resumen). Estoy haciendo esto:¿Cómo imprimir el valor de cadena desde la acción de punto de interrupción en Xcode 4?

the person name is: @[email protected] 

pero eso imprime la dirección de la memoria. Puedo cambiar a la opción depurador de Comando y hacer

po f.name 

pero luego perder mi descripción, tal como se utiliza en la primera opción. Usando la opción de registro, ¿hay alguna manera de imprimir el valor de la cadena y no la dirección de la memoria?

Respuesta

17

Hay un par de cosas que puede hacer. Agregue una función de registro del menú desplegable, luego agregue otro cuadro y seleccione Debugger Command e ingrese po f.name.

Si usted quiere que su registro sea más complicado, que podría hacer algo más parecido a esto:

the person name is: @(const char *)[(NSString*)[p.name description] UTF8String]@ 

Es mejor apuesta es, probablemente, sólo tiene que utilizar la interfaz gráfica del depurador para ver las variables. Si desea registrar mensajes, use NSLog.

+1

En mi caso, XCode simplemente hace caso omiso de todo lo que escribe. ¿Importa el tipo de depurador (es decir, GDB/LLDB)? – futureelite7

+1

@ futureelite7 Tanto GDB como LLDB deberían poder hacer esto. Podría intentar usar la acción "Expresión" en lugar de "Mensaje de registro" y luego simplemente 'NSLog' allí. Entonces, en la ventana "Expresión" escribiría algo como: '(void) NSLog (@" Registrar esta variable:% @ ", aVariable);' –

+1

@JasonCoco Parece que la acción Expresión no está en Xcode 4.6. – Snowcrash

4

Terminé usando 2 acciones diferentes para el mismo punto de interrupción. Primero un registro y luego un comando de depuración con po varName. El único inconveniente es que se imprimirá en 2 filas diferentes.

enter image description here

+0

Puede usar una acción como Jason sugiere – Philip007

26

Puede utilizar declaraciones NSLog con puntos de interrupción utilizando "Comando depurador", pero hay que añadir "expr"

expr (void)NSLog(@"The Person Name is %@", p.name) 

-

using expr command with a Debugger Command as breakpoint in Xcode 4.4

+1

Esto tenía me confundí un poco, en tu expresión estás usando "en lugar de" para las comillas. Se ven casi idénticas en Xcode. Para cualquier otra persona, mientras estaba ahí estaba dando el error de 'error: inesperado '@' en el programa '. – Mike

+0

Gracias Mike, no me di cuenta de esto. Debe haber sido reemplazado automáticamente mientras copio/pegué la expresión. Solucionado. – auco

7

Aquí es una solución que usa solo una acción y utiliza menos caracteres que la solución expr.

debugger command using NSlog

Sin embargo, a menos que añadir el void así:

po (void)NSLog(@"the person name is: %@", p.name) 

usted recibirá un molesto "nulo" impresa con su registro. por ejemplo:

(lldb) po NSLog(@"foo") 
nil 
2013-06-19 14:42:59.025 TheMove[95864:c07] foo 

(lldb) po (void)NSLog(@"foo") 
2013-06-19 14:43:10.758 TheMove[95864:c07] foo 

Si se puede vivir con el nula (puedo) es más rápido que escribir y más fácil de recordar sólo el po

+0

He tratado de usar la sintaxis @ expr @ muchas veces con muy poco éxito. una solución realmente simple, ¡gracias! – LunaCodeGirl

Cuestiones relacionadas