remoted mac for developer descargar apple iphone iphone-sdk-3.0 crash ios-simulator exc-bad-access

iphone - mac - remoted ios simulator for windows



EXC_BAD_ACCESS en el dispositivo, pero está bien en Simulator (3)

Tengo una aplicación de vista de desplazamiento que funciona bien en el simulador, sin embargo, cuando estoy instalado en el dispositivo, me da un EXC_BAD_ACCESS, cuando intento desplazarme por una página. Lo he analizado a través de los instrumentos con asignaciones y fugas, pero no se filtra nada y no se envían mensajes a los zombies ... solo tengo curiosidad por saber qué podría causar tanta diferencia en el simulador frente al dispositivo. Cualquier forma de depurar esto, ya que mi registro de bloqueo simbolizado (parcial a continuación), no parece estar muy simbolizado.

Tipo de excepción: EXC_BAD_ACCESS (SIGBUS)
Códigos de excepción: KERN_PROTECTION_FAILURE en 0x0000000f
Hilo Crashed: 0

Thread 0 Crashed:
0 libobjc.A.dylib 0x0000286e objc_msgSend + 18
1 MyApp 0x00004fee 0x1000 + 16366
2 UIKit 0x000668f4 - [UIViewController view] + 104
3 MyApp 0x00009716 0x1000 + 34582
4 MyApp 0x0000960c 0x1000 + 34316
5 UIKit 0x0001426c - [UIScrollView setContentOffset:] + 344

Gracias


El mal acceso en el dispositivo puede ser causado por muchas razones, la mayoría de ellas relacionadas con el hecho de que el dispositivo tiene menos memoria que el simulador, por lo tanto, liberaría la memoria antes.

La mejor forma de encontrar el problema es ejecutar la aplicación en el dispositivo en modo de depuración sin puntos de interrupción (una de las razones por las que hacerlo es agregar un punto de interrupción y luego eliminarlo). Si puede reproducir el acceso incorrecto de esa manera, después de reproducirlo, puede buscar la consola del depurador (cmd + shift + y) y verá que el programa se ha detenido en un punto de ruptura por igual, luego vaya a la pila de subprocesos para ver la última llamada que tu aplicación hizo y falló, probablemente accediendo a un puntero malo.


Su código en el simulador podría tener el error, pero no está desencadenando EXC_BAD_ACCESS simplemente por la suerte de que un puntero que desreferencia no se encuentre en la memoria no asignada. Un puntero podría ser malo y acceder, pero no detectarse, sigue siendo un error.

Ya has verificado que no hay mensajes de Zombies, lo que habría sido mi primera sugerencia.

Lo siguiente es habilitar Guard Malloc, y luego leer esto

http://developer.apple.com/iphone/library/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html

Solo puede hacer esto en el simulador: su objetivo es usar el montón extra-sensible para hacer que el error arroje EXC_BAD_ACCESS en el simulador.

En el artículo:

  1. Mira cómo configurar las variables en GDB
  2. Lea la sección "Detección de daños en el montón"

Me gustaría agregar mi caso a la discusión. Acabo de resolver un problema realmente similar a este. Funcionó en el simulador pero falló en el dispositivo. Pensé que era un problema de memoria. No era.

Resulta que había olvidado el return de un método no válido. Se esperaba que devolviera un valor, pero olvidé hacer la devolución por completo. Bastante mal error si me preguntas, pero se ejecutó sin problemas en Simulator (incluso cuando la devolución se estaba usando para almacenar la variable y hacer otras cosas con ella).

De alguna manera, el simulador funcionaba siempre con el retorno olvidado. Me gana mucho, pero solo puedo suponer que tiene que estar colocando la última variable que uso en el mismo lugar al que apunta la devolución, lo que da como resultado un retorno falso (falso pero correcto).

Luego se ejecutó en el dispositivo y en condiciones normales se estrelló cada vez. Me llevó a una depuración paso a paso para darme cuenta de que no devolvía correctamente el resultado del método fallido.

Espero que ayude a cualquiera que se enfrente a este problema.