Puede establecer un punto de interrupción condicional en Xcode configurando el punto de interrupción normalmente, luego haga clic con la tecla Control y haga clic en él y seleccione Editar punto de interrupción (elija Ejecutar -> Mostrar -> Puntos de interrupción).
En la entrada del punto de interrupción, hay una columna Condición.
Ahora bien, hay varias cuestiones a tener en cuenta para la afección. En primer lugar, gdb no comprende la sintaxis de puntos, por lo que en lugar de myObj.name, debe usar [myObj name] (a menos que el nombre sea un ivar).
A continuación, como con la mayoría de las expresiones en gdb, debe indicarle el tipo de resultado devuelto, a saber, "BOOL". Así que establezca una condición como:
(BOOL)[[myObj name] isEqualToString:@"Bar"]
A menudo, es más fácil hacer esto en el código agregando temporalmente código como:
if ( [myObj.name isEqualToString:@"Bar"] ) {
NSLog( @"here" );
}
y luego establecer el punto de interrupción en NSLog. Entonces su condición puede ser arbitrariamente compleja sin tener que preocuparse por lo que gdb puede y no puede analizar.
Así es como se usa con los puntos de interrupción condicionales de XCode lldb.
Primero, haga doble clic en el punto de ruptura (o haga clic derecho
edit breakpoint
), puede ver un cuadro de diálogo emergente.Esto es lo que significan esas opciones:
He aquí un resumen. Para el ejemplo anterior en la imagen, significa que cuando la variable
buildingId
es igual a 13, rompa aquí. Si agrego el tiempo de ignorar a 1, se ignorará la primera vez cuandobuildingId
sea igual a 13 y se interrumpirá en la segunda vez que se cumpla la condición.Para las acciones, cuando presione agregar acciones, habrá una lista de opciones. Por lo general, lo que hago es usar
Debugger Command
po
para imprimir variables que necesito verificar y creo que hay mejores formas de usar las acciones que yo.Parece que tiene que volver a compilar y ejecutar la aplicación si cambia las condiciones en tiempo de ejecución
fuente
No estoy seguro de si esto funcionará, pero puede intentar establecer un punto de interrupción en esa línea de código, abrir la consola del depurador (Cmd + Shift + R) y escribir
Donde N se reemplaza por el número del punto de interrupción (un número entero).
fuente
Si mutas myObj.name usando el setter, puedes agregar un punto de interrupción simbólico
-[MyObjClass setName:]
desde la Consola del depurador o desde el menú Ejecutar-> Administrar puntos de interrupción- > Agregar punto de interrupción simbólico en Xcode. Si no es así (¿por qué no? Probablemente no debería modificar la variable de instancia directamente, excepto en el inicializador designado o desbloqueo), puede establecer un punto de observación en gdb (use la Consola del depurador en Xcode una vez que el depurador se esté ejecutando). Esta página explica cómo. No creo que Xcode exponga una interfaz de usuario para establecer puntos de observación sin usar la consola de depuración.fuente
En ocasiones, cuando se trabaja con Frameworks (depuración de compilaciones) y se necesita poner un punto de interrupción en cierto archivo / ubicación que es difícil de navegar o que no se expone públicamente en un framework en desarrollo. Una opción es escribir una clase auxiliar para activar puntos de interrupción condicionales y facilitar el paso de entrada / salida.
Declaración de encabezado en marco en desarrollo.
Y archivo de implementación:
fuente