2011-02-01 20 views
42

Quando mi fermo a un punto di interruzione in XCode, posso vedere il valore delle variabili NSString. Come posso cambiarli? Posso cambiare le variabili int o double, ma non NSString.come modificare il valore NSString durante il debug in XCode?

+0

nel 1987 potremmo facilmente utilizzare l'equivalente di "Modifica valore ..." di Xcode in tutti i debugger * reali *. Ora siamo relegati alla scrittura del codice debugger ... Ritorno al futuro ... –

risposta

78

È possibile farlo nella console di debug. Supponi di avere NSString* myVar. Nella console, dopo (gdb), digitare set myVar = @"My new string". Se si utilizza (lldb), utilizzare invece l'espressione equivalente expr myVar = @"My new string".

Questo potrebbe non essere visualizzato correttamente nel pannello delle variabili, ma è possibile verificare il valore immettendo po myVar nella console. Il tuo codice dovrebbe prendere il nuovo valore.

per alcuni grandi informazioni su come utilizzare expr, controlla this StackOverflow post.

+0

Questo non funziona per me in XCode 4.3.1 usando (lldb). Ottengo errori su "riferimento a" id "è ambiguo" e "1 errore espressione di parsing". – funroll

+2

Stai colpendo una variazione di un bug noto in XCode 4.3.x. Vedi [questo post] (http://stackoverflow.com/questions/9515630/lldb-fails-to-print-variable-values-with-error-reference-to-id-is-ambiguous). Secondo la risposta, questo è risolto in XCode 4.4 – MikeG

+0

Usando expr whateverVariable = @ "55fc633a22570e2b7e00003b" ha funzionato per me. – finneycanhelp

7

Si può, ma si deve chiamare il codice dal prompt dei comandi del debugger. Per esempio, supponiamo di avere un fuoco punto di interruzione nel modo giusto dopo questa riga:

NSString *myString = @"My current string"; 

Poi alla (gdb) Tipo di messaggio:

call myString = @"My new string" 

Puoi po myString prima di cambiare la stringa e dopo aver modificato per verificare che sia cambiato.

Un altro esempio: si supponga di voler modificare il titolo di un controller di visualizzazione. Puoi usare il setter. * Nota: la notazione dei punti non è supportata nella riga di comando del debugger. Ad esempio, lascia caricare la vista e quindi imposta un punto di interruzione da qualche parte durante la durata del controller di visualizzazione. Poi fare questo:

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

continuare l'esecuzione del programma e si dovrebbe vedere aggiornamento del titolo del vostro controller della vista.

+4

la mia risposta è vecchia. Ora puoi farlo ora: ** po myString = @ "my_new_string" ** e ** po self.title = @ "Nuovo titolo" ** – n8tr

2

Per NSError Sto usando questo:

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