Bloqueo iOS sin error o seguimiento de stack

Tener dificultades para rastrear un crash en una aplicación de iPad. La dificultad surge realmente del hecho de que no hay errores o trazas de stack presentes cuando falla la aplicación. Simplemente desaparece como Keizer Soze, "Y así, poof. Se fue".

Replicé el locking tanto en el simulador como en el dispositivo. No hay loggings de dispositivo cero, nada en la console, etc.

Sé que durante el locking algunas operaciones CoreGraphics están ocurriendo en un hilo de background. Normalmente, aproximadamente tres NSOperations están pateando algunas mezclas de imágenes.

La mezcla consiste en llamadas CGContext * (DrawImage, SetBlendMode, SetAlpha, etc.). El NSOperation vuelve a llamar a un delegado en el hilo principal para manejar la image y configurarlo en UIImage , por lo que no debe ser un conflicto de hilo principal de la UI, pero no descontento nada en este momento.

¿Hay algunos trucos de Xcode que me faltan para rastrear exactamente lo que está sucediendo? O al less get una mejor pista de dónde está el problema?

EDITAR He ejecutado la aplicación en el uso de la memory de seguimiento de instrumentos y he visto que es bastante rock estable alnetworkingedor de 2 MB. Entonces, no creas que es un problema de memory. Pero después de la consideración, esta roca estable 2 MB parece anormalmente baja. ¿Existe la posibilidad de que los instrumentos no recojan las asignaciones de CoreGraphics?

A falta de una solución mejor, y si no es obvio, salpique su aplicación con NSLogs para hacer un círculo donde ocurra esto, luego profundice desde allí a través de puntos de corte y / o loggings adicionales.

Intenta leer los loggings.

Cada vez que mi aplicación falla sin errores, en la mayoría de los casos he encontrado la exception en los loggings.

Primero, vaya a la pestaña Excepciones y 'Agregue el punto de interrupción de exception' usando el signo + en la esquina inferior izquierda. introduzca la descripción de la imagen aquí

Luego, cuando la aplicación se bloquee, click "0 objc_exception_throw" en el subprocess 1 introduzca la descripción de la imagen aquí

Finalmente en la console, ingrese:

  • logging leído (debe get una list de loggings)
  • po $ rax (normalmente la exception está en 'rax')

    (debería ver la salida de exception en la console)

Espero que esto ayude.

Respuesta súper tardía, pero encontré que usar try / catch ayuda a dar información cuando no puedo get una traza de stack y mi aplicación extrae un Keizer Soze.

 @try { // suspected code causing crash/errors } @catch (NSException *exception) { NSLog(@"Exception: %@", exception); } 

En mi caso, fue porque tenía "Objetos zombi" habilitados en el esquema para ayudar a encontrar el problema, lo que eventualmente causó que se agote la memory y se bloquee.

En mi caso, fue debido a una mala connection de salida en el guión gráfico. Verifique el uso del punto de interrupción si se viewDidLoad método viewDidLoad de UIViewController para cargarse. De lo contrario, verifique las conexiones de salida en el guión gráfico.

La connection incorrecta bloquea la aplicación sin ningún error o seguimiento de stack.

Me pregunto que lo que sucedió con this class is not key value coding-compliant for the key error this class is not key value coding-compliant for the key que solía mostrarse en versiones anteriores de XCode.

En mi caso se debió a la liberación de un object. Normalmente diría un post enviado a una instancia desasignada o algo así, pero no lo hizo. Revisé los loggings del iPhone y encontré esto: KERN_INVALID_ADDRESS, que busqué en Google y encontré esto: KERN_INVALID_ADDRESS

Habilitado objects zombie y encontré que intenté usar una instancia desasignada. También me dijo qué object era en los loggings después.

Espero que ayude a los futuros visitantes.