Pregunta

cuando puse NSZombieEnabled = Yes no se escribe nada en la consola.¿Cómo puedo arreglar esto?¿O puede aconsejarme alguna otra herramienta para una EXC_BAD_ACCESS?

¿Fue útil?

Solución

Tienes un simple y viejo accidente.EXC_BAD_ACCESS significa que su aplicación ha intentado acceder a una dirección de memoria que no es válida.Si bien la razón más típica para esto en una aplicación Objective-C sin GC es enviar mensajes a un objeto después de la desasignación, algo que detecta el modo Zombie, este bloqueo en particular puede ocurrir de muchas otras maneras (como se demostró).

Dado que su aplicación falla, debería tener un seguimiento.Debe publicar ese rastreo aquí para que cualquiera de nosotros pueda ayudarlo más.

Como dijo Brad, ejecute su aplicación con la depuración habilitada.En Xcode, encontrará el elemento de menú "Ejecutar/Depurar" en el menú "Ejecutar".Usa ese.Cuando su aplicación falla, debería ver un seguimiento de la pila en la esquina superior izquierda de la ventana del depurador.

No, de verdad, aparecen en el depurador.Una imagen vale más que 1.000 palabras.alt text
(fuente: viernes.com)

Otros consejos

"EXC_BAD_ACCESS" no está necesariamente relacionada con una instancia de zombi. Se puede vincularse un acceso a una referencia indefinida, como una variable local.

NSArray *array;
[array objectAtIndex:0]; // <- Will throw an error

Editar bandera NSZombie sólo ayudará a resolver el "EXC_BAD_ACCESS" provocada por el uso de una instancia de-asignado.

Con el fin de resolver los errores, usted tiene que utilizar la traza del accidente para determinar la ubicación que está mal. A continuación, ir hacia atrás en el código y comprobar todas las misiones y asignaciones.

También asegúrese de inicializar todos los punteros a cero antes de usarlos!

Si utiliza un puntero sin inicializar a cero o cualquier otro objeto, que además probablemente se va a terminar el acceso a la memoria que no es el suyo.

Por ejemplo el siguiente código también dará una EXC_BAD_ACCESS que no es detectable usando la bandera NSZombieEnabled causado por la última línea.

RecordingLocation* closest;

//find the closest recording location
for (...)
{
    //try to find the closest object...
    //suppose we don't find anything so closest is never set.
}

if (closest!=nil)
    NSLog(@"Closest: %f,%f",closest.x,closest.y);

No entiendo cómo la respuesta a esta pregunta realmente responde a la pregunta ..

Me pregunto lo mismo. utilizando xcode4 he permitido NSZobmieEnabled = SÍ para detener Cuando tengo acceso a un objeto que ha sido puesto en libertad, en lugar de chocar con EXC_BAD_ACCESS -. que es muy útil

la pregunta en cuestión era:

"Cuando me puse NSZombieEnabled = Si no hay nada escrito en la consola. ¿Cómo puedo solucionar este problema ...".

simple y directo.

Estoy experimentando el mismo problema. Xcode se detiene con el depurador, pero la consola no produce ningún mensaje. me esperaba algo a lo largo de las líneas de:

"mensaje enviado a la instancia desasignado ...".

buscar desbordamiento de pila para EXC_BAD_ACCESS , encontrará una serie de personas con el mismo problema que usted tiene. La gran mayoría de las veces que se golpea esto, se están encontrando problemas de memoria. Si usted está siguiendo el protocolo descrito aquí o aquí , y usted no está viendo los informes de los mensajes que se envían a lanzado objetos en la consola, que podría ser algo diferente.

¿Usted ha intentado iniciar la aplicación en el depurador (Ejecutar | Depurar - puntos de interrupción en)? Tan pronto como se pulsa el EXC_BAD_ACCESS, el depurador debe detener. Si nos fijamos en la traza mostrada en el depurador (Ejecutar | depurador)., Puede ser que le mostrará dónde se produjo el error

Como acabo de pasar un feliz 20 minutos mirando al este con NSZombieEnabled no trabajar, pensé que me gustaría añadir que esto causará un EXC_BAD_ACCESS

NSArray *arr = [NSArray arrayWithObjects:@"@dog","@cat",nil];

Tenga en cuenta la falta '@' en el segundo parámetro. No lo hice: -)

tuve una experiencia diferente con EXC_BAD_ACCESS, así que me gustaría compartir.

Como se indica en las preguntas, a pesar de que NSZombieEnabled se comprobó, no había nada escrito en la consola. Después de varias horas de lucha en el simulador, decidí instalarlo en el dispositivo. El mensaje de error que obtuve de depuración con el dispositivo era más útil.

Con el tiempo, me di cuenta de que estaba recibiendo el error EXC_BAD_ACCESS y el comportamiento extraño porque I renombrado un par de archivos xib un día antes. He seleccionado el objeto 'Vista Controlador' para el archivo MainWindow.xib y corrigió el SEMILLA Nombre propiedad. Entonces, todo funcionó sin problemas.

No creo que todos los EXC_BAD_ACCESS se encuentra por NSZombie Activación ..
Debido a que algunos casos estoy tampoco conseguía resultado durante el uso de zombie ..
creo que sólo relacionada EXC_BAD_ACCESS al uso de objeto lanzado puede ver al permitir zombi.

Y una cuestión más he observado durante el uso de zombi es: a veces también causan accidentes de depuración. Un caso Cogí estrelló, presentados:
*** -[MagazineWebview respondsToSelector:]: message sent to deallocated instance 0x58ce2a0
Esto sólo ocurre cuando permite NSZombie.

Lo que estoy haciendo es, en
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
Libero a la corriente objeto "MagazineWebview" y cargar el [URL de solicitud] dictada en otro objeto "MagazineWebview". Para mis achiving algunas funcionalidades ...

gracias

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top