2011-12-23 9 views
9

Después de actualizar a XCode4 (v. 4.2, 4D199) parece que cada vez que mis aplicaciones fallan durante la depuración, la depuración apunta a main(), y la pila no está simbiotada y es inútil.El depurador XCode4 siempre se rompe en Main

Esto ha estado funcionando bien durante años, no tengo idea de lo que salió mal.

Estoy usando GDB. También probé el LLDB según this advice, y tampoco funcionó (pila inútil similar).

Mis puntos de interrupción trabajo, obtengo la pila completa, y puedo inspeccionar las variables cuando mi código las alcanza.

Pasos para reproducir:

NB. esto sucede con mi propio proyecto, pero voy a utilizar el código de Apple aquí para eliminar esa variable de la ecuación

  1. Descargar el siguiente ejemplo de Apple: https://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007710

  2. En la clase ImagesViewController, añada el siguiente código al método viewDidLoad (por lo que se colgará - queremos que se caiga para esta prueba):

    // please note: this code is designed to crash! I want it to crash, to highlight my issue with XCode. 
    NSMutableArray* test = [NSMutableArray new]; 
    [test insertObject:NULL atIndex:0]; 
    
  3. a continuación, ejecute º La aplicación & golpea la fila de 'Imágenes'.

  4. Se estrella con un mensaje como:

    2011-12-23 14:07:02.788 UICatalog[13394:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 
    *** First throw call stack: 
    (0x37bbb8bf 0x316a11e5 0x37b1020f 0x699f 0x34fac7ff 0x34fb8c39 0x34fb8aa9 0x34fb898f 0x34fb815b 0x34fb7f53 0x34fac673 0x34fac349 0x66c1 0x35026565 0x3509ece7 0x31aec943 0x37b8fa63 0x37b8f6c9 0x37b8e29f 0x37b114dd 0x37b113a5 0x3768ffcd 0x34fa1743 0x2459 0x2418) 
    terminate called throwing an exception(gdb) 
    

Ver en Xcode: enter image description here

+4

Eche un vistazo a este hilo: http://stackoverflow.com/questions/7841610/xcode-4-2-debug-doesnt-simbolicate-s tack-call – brigadir

+0

Brigadir, esa solución funciona. Muchas gracias! –

Respuesta

17

Gracias a brigadir por dirigirme a the solution!

Funciona bien. Aquí hay algunas capturas de pantalla de la forma de resolver esto para que nadie se entere mi pregunta:

step 1

Toque el botón más de la pestaña de puntos de ruptura

step 2

A continuación, haga clic en Hecho

+0

Dulce. También tuve este problema, y ​​esto lo solucionó. :) –

+0

Genial, pero ... ahora ¿cómo veo cuál fue la excepción lanzada? No puedo verlo en ninguna parte obvia. – bacar

+0

@bacar, a veces tienes que presionar el botón "play" varias veces para continuar la depuración y obtener la excepción real (solo recuerda dónde se rompió la primera vez, ya que perderás tu lugar una vez que continúes). No es ideal, pero hace el trabajo bien. –

Cuestiones relacionadas