In Xcode, GDB ti consente di modificare le variabili locali durante il debug (vedi come modificare il valore NSString durante il debug in XCode? ). LLDB offre una funzionalità simile? In tal caso, come possiamo usarlo?
In Xcode, GDB ti consente di modificare le variabili locali durante il debug (vedi come modificare il valore NSString durante il debug in XCode? ). LLDB offre una funzionalità simile? In tal caso, come possiamo usarlo?
Risposte:
expr myString = @"Foo"
(lldb) help expr
Valuta un'espressione C / ObjC / C ++ nel contesto del programma corrente, usando le variabili attualmente nell'ambito. Questo comando accetta input "non elaborati" (non è necessario citare cose).Sintassi: espressione -
Opzioni del comando Utilizzo: espressione [-f] [-G] [-d] [-u] - espressione [-o] [-d] [-u] - espressione
-G <gdb-format> ( --gdb-format <gdb-format> ) Specify a format using a GDB format specifier string. -d <boolean> ( --dynamic-value <boolean> ) Upcast the value resulting from the expression to its dynamic type if available. -f <format> ( --format <format> ) Specify a format to be used for display. -o ( --object-description ) Print the object description of the value resulting from the expression. -u <boolean> ( --unwind-on-error <boolean> ) Clean up program state if the expression causes a crash, breakpoint hit or signal.
Esempi:
expr my_struct-> a = my_array [3]
expr -f bin - (indice * 8) + 5
expr char c [] = "pippo"; c [0]NOTA IMPORTANTE: poiché questo comando accetta input "raw", se si utilizzano opzioni di comando è necessario utilizzare "-" tra la fine delle opzioni di comando e l'inizio dell'input raw.
"expr" è un'abbreviazione di "espressione"
'expr myLabel.text = @"hello!"
ma ho un error: property 'text' not found on object of type 'UILabel *'
... Qualche idea?
expr (void)[label setText:@"Foo"]
dovrebbe farlo. La sintassi del punto di solito non funziona nel debugger. Probabilmente lldb lo interpreta come se volessi accedere a un membro di una c-struct, ma non sono sicuro che questa sia la ragione per cui non funzionerà. Dot-Syntax non funziona po
neanche per . invece di po label.text
te devi usarepo [label text]
@property
.
p
come scorciatoia per expr
. Esempio:(lldb) p url = @"http://google.com"
e
come scorciatoia per expr
. A proposito, p
è un alias per la stampa che è un alias per expr --
(solo per valutare l'input grezzo, senza flag) expr -o -- [object]
o che in po
genere ti dà un output più utile per gli oggetti.
Le seguenti cose funzionano per me. Sto usando Xcode 8.
Se si desidera impostare una variabile (ad esempio un "dict") su zero e quindi testare il flusso di codice, è possibile provare quanto segue.
Sembrerà qualcosa di simile nella console.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil