¿Cómo cambiar el valor de las variables durante la depuración con LLVM en Xcode?


En Xcode, GDB le permite cambiar las variables locales durante la depuración (consulte ¿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?

Author: Community, 2012-03-28

2 answers

expr myString = @"Foo"

(lldb) help expr
Evaluar una expresión C / ObjC / C++ en el actual contexto del programa, utilizando variables actualmente en el ámbito. Este comando toma entrada ' raw ' (sin necesidad de citar cosas).

Sintaxis: expresión --

Uso de las opciones de comando: expresión [- f] [- G ] [-d] [- u] expression expresión [- o] [- d ] [- u] expression 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 bin (índice * 8) + 5
expr char c [] = "foo"; c [0]

NOTA IMPORTANTE: Debido a que este comando toma entrada 'raw' , si usa cualquier opción de comando debe usar ' -- ' entre el final del opciones de comando y el comienzo de la entrada sin procesar.

'expr' es una abreviatura de'expression'

 230
Author: Matthias Bauch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-28 12:43:21

Las siguientes cosas funcionan para mí. Estoy usando Xcode 8.

Si desea establecer alguna variable (por ejemplo, un "dict") en nil y luego probar el flujo de código, puede probar lo siguiente.

  1. Coloque el punto de interrupción correctamente después de inicializado al valor deseado.
  2. luego ejecute "expression dict = nil" en la línea de comandos lldb para cambiarlo. (por ejemplo, "nil")
  3. Paso por encima del punto de interrupción.
  4. Marque la variable "dict" en la siguiente línea. Será nulo.

Se verá algo así como en la consola.

(lldb) expression dict = nil
(NSDictionary *) $5 = nil
 10
Author: arango_86,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-06 09:31:08