2012-09-25 7 views
7

El código no debería tener ningún efecto Debe ser factible en cualquier lugar No genera advertencia del compilador¿Hay alguna ninguna operación op en Objective-C que se puede utilizar sólo para establecer punto de interrupción

Básicamente veces quiero hacer NSAssert. Sin embargo, en lugar de NSAssert, a veces quiero hacer mi if {} my self. De esta forma puedo establecer o deshacer fácilmente el punto de ruptura

Actualmente esto es lo que hago.

if ([email protected]"Business") 
{ 
    error=nil; //Some code for breakpoint. I want something that do nothing actually. 
} 

Es que simplemente tengo una variable llamada error que ya no voy a usar. Pero lo que sería una buena alternativa

También probé [nil donothing]; pero eso tiene el error del compilador

Respuesta

7

Prueba esto:

while (false); 

Hay otras posibilidades, como if (false) o incluso solo una línea con un punto y coma ;, pero en esos casos la ejecución se detiene en la siguiente instrucción, posiblemente porque el compilador simplemente elimina esos bits vacíos de código. Usar while tiene la ventaja de que la ejecución se detendrá en esa línea (suponiendo que ponga un punto de interrupción allí, por supuesto).

+0

todos son una gran respuesta. Este es el mejor –

+0

¿'if (false)' y ';' funcionarán bien si no usamos optimizaciones? –

+1

@ BenC.R.Leggiero No puedo decirlo con certeza, pero no tomaría mucho tiempo para probarlo. – Caleb

2

no se pueden comparar 2 cadenas directamente; intente [NSString isEqualToString:]

3

Puede dar condiciones de puntos de interrupción, mantener presionada la opción y el comando y hacer clic en el punto de interrupción, debe obtener una ventana emergente. En el campo 'condición' yo puede introducir algo así como

[entityName isEqualToString:@"Business"] 

(Tenga en cuenta que usted debe comparar cadenas con -isEqualToString: no ==, ya que este último se comparan los punteros no a los personajes en las mismas cadenas.)

Por al utilizar la condición en el punto de interrupción, no debería necesitar la instrucción if en absoluto, y también habilitar y deshabilitar la comprobación sin sin recompilar. Hay mucho más que puede hacer con los ajustes de punto de interrupción, al igual que lo tiene automáticamente un mensaje de registro o ejecutar un comando depurador etc.

+0

Quiero cosas que puedo ver claramente en el código. –

+0

Personalmente creo que tener muchas condiciones de depuración en mi código es un problema, ya que rápidamente pierdes la pista de dónde están todas y luego tienes que buscarlas para la producción, o simplemente buscar un error diferente.Poner todos los pasos de depuración como romper, iniciar sesión, alertar el estado del código incorrecto, etc. Me resulta mucho más conveniente estar en los puntos de corte xcode. Luego puedo acceder a una lista de ellos, activarlos y desactivarlos fácilmente, y no se comprometen con el control de fuente a menos que se lo haya hecho explícitamente. Pero todos tienen su propia forma de codificación y definitivamente debes usar lo que sientas que funciona mejor para ti. –

+0

En realidad, lo que sí tiene sentido también. Solo repite la condición. Hmm ... Control de fuente. Tengo que aprender a usarlo. –

0

puede utilizar __asm int 3;

if ([entityName isEqualToString:@"Business"]) { 
    __asm int 3; 
} 

De CFInternal.h.

#if defined(__ppc__) || defined(__ppc64__) 
#define HALT asm __volatile__("trap") 
#elif defined(__i386__) || defined(__x86_64__) 
#if defined(__GNUC__) 
#define HALT asm __volatile__("int3") 
#elif defined(_MSC_VER) 
#define HALT __asm int 3; 
#else 
#error Compiler not supported 
#endif 
#endif 
if ([entityName isEqualToString:@"Business"]) { 
    HALT; 
} 
+0

¿Qué hace __asm ​​int 3? no op? Si solo se detiene, quiero que se haga antes del punto de quiebre. –

+1

Llamará a interrupción de punto de interrupción. –

3

En C, se puede tener una instrucción de no operación simplemente poniendo un punto y coma solo en una línea:

if (TRUE) { 
    ; // Neutral operation 
} 

En Objective-C se podría hacer lo mismo, la cosa es sus paradas del programa antes de la siguiente línea, como se puede ver aquí:

enter image description here

+0

Excelente consejo. Quiero insertar una línea con comentario para hacer que el código auto-documente que "No se necesita código en este momento". –

Cuestiones relacionadas