En Xcode, GDB le permite cambiar las variables locales durante la depuración (vea cómo cambiar el valor de NSString durante la depuración en XCode? ). ¿LLDB ofrece una funcionalidad similar? Si es así, ¿cómo podemos usarlo?
En Xcode, GDB le permite cambiar las variables locales durante la depuración (vea cómo cambiar el valor de NSString durante la depuración en XCode? ). ¿LLDB ofrece una funcionalidad similar? Si es así, ¿cómo podemos usarlo?
Respuestas:
expr myString = @"Foo"
(lldb) help expr
Evalúa una expresión C / ObjC / C ++ en el contexto actual del programa, usando variables actualmente en alcance. Este comando toma la entrada 'en bruto' (no es necesario citar cosas).Sintaxis: expresión -
Uso de opciones de comando: expresión [-f] [-G] [-d] [-u] - expresión [-o] [-d] [-u] - expresión
-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.
Ejemplos:
expr my_struct-> a = my_array [3]
expr -f bin - (índice * 8) + 5
expr char c [] = "foo"; c [0]NOTA IMPORTANTE: Debido a que este comando toma una entrada 'sin procesar', si usa alguna opción de comando, debe usar '-' entre el final de las opciones del comando y el comienzo de la entrada sin procesar.
'expr' es una abreviatura de 'expresión'
'expr myLabel.text = @"hello!"
pero me sale un error: property 'text' not found on object of type 'UILabel *'
... ¿Alguna idea?
expr (void)[label setText:@"Foo"]
Deberías hacerlo. La sintaxis de puntos generalmente no funcionará en el depurador. Probablemente, lldb lo interpreta como si quisieras acceder a un miembro de una estructura c, pero no estoy seguro de si esta es la razón por la que no funcionará. La sintaxis de puntos tampoco funciona po
. en lugar de po label.text
tener que usarpo [label text]
@property
.
p
como atajo para expr
. Ejemplo:(lldb) p url = @"http://google.com"
e
como atajo para expr
. Por cierto, p
es un alias para imprimir que es un alias para expr --
(solo evaluar la entrada sin formato, sin banderas) expr -o -- [object]
o, en po
general, le brinda una salida más útil para los objetos.
Lo siguiente me funciona. Estoy usando Xcode 8.
Si desea establecer alguna variable (por ejemplo, un "dict") en cero y luego probar el flujo del código, puede intentar lo siguiente.
Se verá algo así como en la consola.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil