2009-08-19 9 views
23

Durante la depuración de la consola siempre me escupe un mensaje de error: "Interrumpir en _NSLockError() para depurar"Interrumpir _NSLockError() para depurar ... ¿Cómo?

Mi hipótesis es la siguiente: en XCode tengo que aparecer un cierto breackpoint, por lo que el depurador se detiene en el punto en que esta se produce un error.

¿Cómo puedo hacer esto?

Respuesta

14

1/En el menú seleccione Crear -> Construir y depuración

2/Haga clic en el icono "BGF" - se le cambió a la "consola Depurador"

3/Presione Control + C para interrumpe su binario. Obtendrá el prompt gdb.

4/escriba "b _NSLockError" y continúe la ejecución después de establecer el punto de interrupción.

(gdb) b _NSLockError 
Breakpoint 8 at 0x911db1a9 
(gdb) c 
Continuing. 

5/se puede interactuar con el BGF del mismo modo que corría desde la consola, es decir, puede de nuevo Ctrl + C y ver los puntos de interrupción de corriente:

(gdb) info breakpo 
Num Type   Disp Enb Address What 
8 breakpoint  keep y 0x911db1a9 <_NSLockError+9> 
+0

Gracias !!! Eso es exactamente lo que estaba buscando :) – Nobik

+0

A veces me resulta más fácil depurar mis binarios de Terminal.app ejecutándolos desde dentro de GDB, es decir, "gdb /path_to/App.app/Contents/MacOS/App" – diciu

+0

Hmm ... es mucho más fácil hacerlo a mi manera, ya que continuará aplicándose a través de sesiones de depuración ... –

12

Para hacer esto automáticamente para su proyecto en Xcode :

  1. En Xcode, Option-Command-B para abrir la ventana Puntos de interrupción (o Ejecutar> Mostrar> Puntos de interrupción).
  2. Donde dice "Hacer doble clic para el símbolo", hacer doble clic ... y pegar en "_NSLockError".
  3. Haga clic en cualquier otro lugar en la ventana, y con su nueva entrada se actualizará automáticamente (o simplemente añadir manualmente) con el Módulo = "Fundación" (sin las comillas)
  4. Build & Go y Ahora va a caer en el depurador automáticamente cuando alcanzas un punto muerto detectado automáticamente.
41

Uso de la interfaz gráfica de usuario de Xcode 4:

  1. Abra el navegador de puntos de ruptura (Comando + 6 o Ver> Navegadores> Mostrar Breakpoint Navigator)
  2. Haga clic en '+' en la esquina inferior izquierda y seleccione 'Añadir Punto de interrupción simbólica ...'
  3. Enter '_NSLockError' en el campo de símbolos
  4. Enter 'Fundación' en el campo Módulo
  5. Haga clic en 'Hecho'

Como se describió anteriormente, el depurador se romperá en la cerradura y se producirá un interbloqueo, por lo que puede verificar la pila de llamadas y determinar dónde se produjo el bloqueo original.