2011-02-01 14 views
42

Cuando estoy detenido en un punto de interrupción en XCode, puedo ver el valor de las variables NSString. ¿Cómo puedo cambiarlos? Puedo cambiar las variables int o double, pero no NSString.cómo cambiar el valor NSString durante la depuración en XCode?

+0

en 1987 podríamos usar fácilmente el equivalente de "Editar valor ..." de Xcode en todos los depuradores * reales *. Ahora estamos relegados a escribir el código del depurador ... De vuelta al futuro ... –

Respuesta

78

Puede hacerlo en la consola de depuración. Digamos que tiene NSString* myVar. En la consola, después de (gdb), escriba set myVar = @"My new string". Si está utilizando (lldb), utilice la expresión equivalente expr myVar = @"My new string" en su lugar.

Esto puede no aparecer correctamente en el panel de variables, pero puede verificar el valor ingresando po myVar en la consola. Tu código debería recoger el nuevo valor.

Para una gran información sobre el uso de expr, echa un vistazo a this StackOverflow post.

+0

Esto no funciona para mí en XCode 4.3.1 usando (lldb). Recibo errores sobre "la referencia a 'id' es ambigua" y "1 error al analizar la expresión". – funroll

+2

Estás accediendo a una variación de un error conocido en XCode 4.3.x. Ver [esta publicación] (http://stackoverflow.com/questions/9515630/lldb-fails-to-print-variable-values-with-error-reference-to-id-is-ambiguous). Según la respuesta, esto se resuelve en XCode 4.4 – MikeG

+0

Utilizando expr whateverVariable = @ "55fc633a22570e2b7e00003b" funcionó para mí. – finneycanhelp

7

Puede, pero usted tiene que llamar al código desde el símbolo del sistema depurador. Por ejemplo, supongamos que tiene un fuego punto de interrupción de la derecha después de esta línea:

NSString *myString = @"My current string"; 

Luego, al (BGF), escriba:

call myString = @"My new string" 

Usted puede po myString antes de cambiar la cuerda y después de cambiar para verificar que ha cambiado.

Otro ejemplo: Digamos que quería cambiar el título de un controlador de vista. Puedes usar el colocador. * Nota: la notación de puntos no es compatible con la línea de comandos del depurador. Por ejemplo, permita que la vista cargue y luego establezca un punto de interrupción en algún lugar durante la vida útil de su controlador de vista. Luego haga esto:

call (id)[self setTitle:@"New Title"] 

Continúe ejecutando el programa y debería ver la actualización del título de su controlador de vista.

+4

mi respuesta es vieja. En realidad, puede hacer esto ahora: ** po myString = @ "my_new_string" ** y ** po self.title = @ "New Title" ** – n8tr

2

Para NSError estoy usando esto:

(lldb) expression aTempError = (NSError*)[[NSError alloc] initWithDomain:@"MANO" code:1 userInfo:nil] 
Cuestiones relacionadas