¿Cómo habilitar NSZombie en Xcode?

302

Tengo una aplicación que falla sin seguimiento de errores. Puedo ver parte de lo que está sucediendo si depuro, pero no puedo entender qué objeto es "zombie".

¿Alguien sabe cómo habilitar NSZombie en Xcode 4?

jason
fuente

Respuestas:

440

Las variables de entorno ahora son parte del "esquema".

Para editar el esquema y activar zombies:

  • En el menú "Producto", seleccione "Editar esquema".

  • Vaya a la etapa "Ejecutar Foo.app" en el panel izquierdo y la pestaña "Argumentos" a la derecha.

  • Agregue NSZombieEnableda la sección "Variables de entorno" y establezca el valor en YES, como podría hacerlo en Xcode 3.


En Xcode 4.1 y superior , también hay una casilla de verificación en la pestaña "Diagnóstico" de la etapa "Ejecutar" para "Habilitar objetos zombis".


Con Xcode 6.4:

Captura de pantalla

一 二三
fuente
55
¿No interrumpe la llamada al objeto desasignado en el dispositivo, alguna forma de que eso suceda?
jjxtra
95
Cambió nuevamente en 4.2, vea mi respuesta a continuación. Vaya a Producto-> Editar esquema-> Diagnóstico
Moshe Kravchik
En Xcode, en el menú Ayuda en la parte superior (el último a la derecha) busque "Editar esquema", lo guiará en la dirección correcta cada vez en cualquier versión.
Unom
Si habilitamos esta función NSZombieEnabled en nuestra aplicación, ¿lanzaremos la aplicación para almacenarla? Porque vi una publicación que decía que no es una buena práctica lanzar a la tienda cuando habilitamos esta función.
SURESH SANKE
2
Para los novatos posteriores, en Xcode 6.1, vaya al menú Producto> Esquema-Editar esquema> pestaña Diagnóstico> Casilla de verificación Habilitar objetos zombis
Joshua Dance
146

Encontré el mismo problema con la resolución de problemas EXC_BAD_ACCESS y tuve dificultades para encontrar la configuración con Xcode 4.2 (la última que viene con iOS5 SDK). Apple sigue moviendo cosas y la configuración ya no está donde solía estar.

Afortunadamente, lo encontré y funciona para el dispositivo, no solo para Simulator. Debe abrir el menú Producto en Xcode, seleccionar Editar esquema y luego elegir la pestaña Diagnóstico. Ahí tienes "Habilitar objetos Zombie". ¡Una vez seleccionado y ejecutado en el depurador, te indicará el objeto doblemente liberado! ¡Disfrutar!

En breve

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Moshe Kravchik
fuente
2
En Xcode, en el menú Ayuda en la parte superior (el último a la derecha) busque "Editar esquema", lo guiará en la dirección correcta cada vez en cualquier versión.
Unom
43

Producto> Perfil lanzará Instrumentos y luego debería haber una "Plantilla de seguimiento" llamada "Zombis". Sin embargo, esta plantilla de rastreo solo está disponible si el destino de compilación actual es el simulador; no estará disponible si tiene el destino configurado en su dispositivo iOS.

También otra cosa a tener en cuenta es que no hay un instrumento Zombies real en la biblioteca de instrumentos. La plantilla de rastreo de zombies en realidad consiste en el instrumento de asignaciones con el conjunto de configuración de inicio "Habilitar detección de NSZombie".

Shane Fitzgibbon
fuente
13
"Sin embargo, esta plantilla de rastreo solo está disponible si el destino de compilación actual es el simulador". ¡Gracias!
ajh158
¡Gracias, eso era lo que estaba buscando!
Acantilado Ribaudo
En Xcode, en el menú Ayuda en la parte superior (el último a la derecha) busque "Editar esquema", lo guiará en la dirección correcta cada vez en cualquier versión.
Unom
25

Es una simple cuestión de configurar una variable de entorno en su ejecutable (NSZombieEnabled = YES), y luego ejecutar / depurar su aplicación de manera normal NSLog.

Para obtener más información, consulte esta página de CocoaDev: http://www.cocoadev.com/index.pl?NSZombieEnabled

Además, este proceso será mucho más fácil con el lanzamiento de 10.6 y las próximas versiones de Xcode e Instruments. Solo digo'. =)

Dave DeLong
fuente
Totalmente de acuerdo. El nuevo instrumento Zombies es muy bonito.
Quinn Taylor el
22

Producto> El perfil desplegará los instrumentos. Selecciona zombies del panel y enloquece.

garageàtrois
fuente
55
@jluebbert diría que esforzarse más porque definitivamente veo, corriendo Xcode 4.02
garageàtrois
16

Ir a Producto - Esquema - editar esquema - Argumentos - Conjunto de variables de entorno NSZombieEnabled = YES

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

PJR
fuente
12

En xcode 4.2

Ir a Producto -> editar esquema -> haga clic en Ejecutar yourappname.app -> Diagonostics -> Habilitar objeto Zombie.

Dax
fuente
6

A partir de Xcode 3.2.5 y Snow Leopard (Mac OS X 10.6), puede ejecutar su código a través del instrumento Zombis: Run > Run with Performance Tool > Zombies. Eso le permite ver objetos particulares y sus conteos en una línea de tiempo.

Dov
fuente
1
Puedo ver la opción de zombies pero está atenuada. ¿Sabes cómo está habilitado?
Rahul Vyas
@RahulVyas, nunca había visto eso antes, pero ¿tienes activada la recolección de basura? Pude ver zombis que no tienen sentido en ese contexto
Dov
He activado la recolección de basura en la configuración que muestra compatible [-fobjc-gc] pero aún esa opción está desactivada. De hecho, solo las últimas 5 opciones están habilitadas en la categoría de instrumentos. Alguna otra idea? ¿O estoy haciendo algo mal?
Rahul Vyas
@RahulVyas: Lo siento, para ser más claros, pensé que desactivar la recolección de basura posiblemente habilitaría a los zombis, ya que no creo que sea posible tener un zombi con recolección de basura. Si eso no lo resuelve, recomendaría leer la documentación de Instrumentos (tienen buenos informes sobre cada instrumento) y si aún no lo ha recibido, publique una pregunta aquí para obtener una mayor atención (y finalmente una respuesta) .
Dov
4

En Xcode 4.5.2, goto Producto -> Editar esquema -> y en la pestaña Diagnóstico, marque la casilla de verificación entre el Objetivo C y Habilitar objetos zombis y haga clic en Aceptar

Gani414
fuente
3

Para habilitar el registro de Zombie, haga doble clic en el ejecutable en el grupo de ejecutables de su proyecto Xcode. En este punto, haga clic en la pestaña Argumentos y, en la Variables to be set in the environment:sección, cree una variable llamada NSZombieEnabledy establezca su valor en YES.

Sueño de espejos
fuente
3

En XCode 4.0: para detectar NSZombie en instrumentos, seleccione el simulador como su objetivo (no puede detectar NSZomboe en el dispositivo). Ejecute Instrumentos (CMD + I) y seleccione la plantilla de rastreo "Zombies". Disfrutar.

Ehud B
fuente
2

En las preferencias de su ejecutable, agregue la variable de entorno NSZombieEnabledy establezca el valor en YES.


fuente
2

en su XCODE (4.3) al lado del botón de reproducción :) (ejecutar)

seleccionar: editar esquema

se abrirá la ventana de administración del esquema

haga clic en la pestaña Argumentos

debería ver: 1- Argumentos pasados ​​en el lanzamiento 2- Variables de entorno

dentro del lugar (2- variables de entorno) Nombre: NSZombieEnabled
Valor: SÍ

Y está hecho ...

Rabih Harb
fuente
1

NSZombieEnabled se utiliza para depurar BAD_ACCESS,

habilite la variable de entorno NSZombiesEnabled de la hoja de esquemas de Xcode.

Click on Product⇒Edit Scheme to open the sheet and set the Enable Zombie Objects check box

Este video te ayudará a ver lo que estoy tratando de decir.

usuario2554822
fuente
@kleopatra Thanks actualizó mis respuestas con la configuración adecuada
user2554822