Comment activer NSZombie dans Xcode?

302

J'ai une application qui plante sans suivi des erreurs. Je peux voir une partie de ce qui se passe si je débogue, mais je ne peux pas déterminer quel objet est "zombie-ing".

Est-ce que quelqu'un sait comment activer NSZombie dans Xcode 4?

Jason
la source

Réponses:

440

Les variables d'environnement font désormais partie du "schéma".

Pour modifier le schéma et activer des zombies:

  • Dans le menu "Produit", sélectionnez "Modifier le schéma".

  • Accédez à l'étape "Exécuter Foo.app" dans le panneau de gauche et à l'onglet "Arguments" à droite.

  • Ajoutez NSZombieEnabledà la section "Variables d'environnement" et définissez la valeur sur YES, comme vous pouvez le faire dans Xcode 3.


Dans Xcode 4.1 et supérieur , il y a aussi une case à cocher sur l'onglet "Diagnostics" de l'étape "Exécuter" pour "Activer les objets zombies".


Avec Xcode 6.4:

Capture d'écran

一 二三
la source
5
N'interrompt-il pas l'appel à l'objet désalloué sur l'appareil, de quelle manière que ce soit possible?
jjxtra
95
Cela a encore changé en 4.2, voir ma réponse ci-dessous. Allez dans Produit-> Modifier le schéma-> Diagnostics
Moshe Kravchik
Dans Xcode, dans le menu Aide en haut (le dernier à droite), recherchez "Edit Scheme", il vous dirigera dans la bonne direction à chaque fois dans n'importe quelle version.
unom
Si nous activons cette fonctionnalité NSZombieEnabled sur notre application, libérerons-nous l'application pour la stocker ..? Parce que j'ai vu un article dire que ce n'est pas une bonne pratique de publier pour stocker lorsque nous activons cette fonctionnalité.
SURESH SANKE du
2
Pour les recrues à venir, dans Xcode 6.1, vous allez dans le menu Produit> Schéma d'édition du schéma> onglet Diagnostics> Case à cocher Activer les objets zombies
Joshua Dance
146

J'ai rencontré le même problème avec le dépannage de EXC_BAD_ACCESS et j'ai eu du mal à trouver le paramètre avec Xcode 4.2 (le dernier qui vient avec le SDK iOS5). Apple continue de déplacer les choses et les paramètres ne sont plus là où ils étaient.

Heureusement, je l'ai trouvé et cela fonctionne pour l'appareil, pas seulement pour Simulator. Vous devez ouvrir le menu Produit dans le Xcode, sélectionnez Modifier le schéma, puis choisissez l'onglet Diagnostics. Là, vous avez "Activer les objets Zombie". Une fois sélectionné et exécuté dans le débogueur, vous serez dirigé vers l'objet à double libération! Prendre plaisir!

En bref

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Moshe Kravchik
la source
2
Dans Xcode, dans le menu Aide en haut (le dernier à droite), recherchez "Edit Scheme", il vous dirigera dans la bonne direction à chaque fois dans n'importe quelle version.
unom
43

Produit> Profile lancera Instruments et ensuite vous devriez avoir un "Trace Template" nommé "Zombies". Cependant, ce modèle de trace n'est disponible que si la destination de génération actuelle est le simulateur - il ne sera pas disponible si vous avez défini la destination sur votre appareil iOS.

Une autre chose à noter est qu'il n'y a pas d'instrument Zombies dans la bibliothèque d'instruments. Le modèle de trace des zombies se compose en fait de l'instrument d'allocations avec le jeu de configuration de lancement «Activer la détection NSZombie».

Shane Fitzgibbon
la source
13
"Cependant, ce modèle de trace n'est disponible que si la destination de génération actuelle est le simulateur". Je vous remercie!
ajh158
Merci, c'est ce que je cherchais!
Cliff Ribaudo
Dans Xcode, dans le menu Aide en haut (le dernier à droite), recherchez "Edit Scheme", il vous dirigera dans la bonne direction à chaque fois dans n'importe quelle version.
unom
25

Il (NSZombieEnabled = YES)suffit de définir une variable d'environnement sur votre exécutable , puis d'exécuter / déboguer votre application normalement.Si vous envoyez un message à un zombie, votre application se bloquera / s'arrêtera sur le débogueur et NSLogun message pour vous.

Pour plus d'informations, consultez cette page CocoaDev: http://www.cocoadev.com/index.pl?NSZombieEnabled

De plus, ce processus deviendra beaucoup plus facile avec la sortie de 10.6 et les prochaines versions de Xcode et Instruments. Je dis juste '. =)

Dave DeLong
la source
Tout à fait d'accord. Le nouvel instrument Zombies est très sympa.
Quinn Taylor
22

Produit> Le profil fera apparaître Instruments. Sélectionnez des zombies dans le panneau et devenez fou.

garageàtrois
la source
5
@jluebbert Je dirais qu'il faut essayer plus fort parce que je le vois vraiment, en exécutant Xcode 4.02
garageàtrois
16

Allez dans Produit - Schéma - modifier le schéma - Arguments - Ensemble de variables d'environnement NSZombieEnabled = YES

entrez la description de l'image ici

entrez la description de l'image ici

PJR
la source
12

Dans xcode 4.2

Allez, Produit -> modifier le schéma -> cliquez sur Exécuter votrenomapp.app -> Diagonostics -> Activer l'objet Zombie.

Dax
la source
6

A partir de Xcode 3.2.5 et Snow Leopard (Mac OS X 10.6), vous pouvez exécuter votre code à travers l'instrument Zombies: Run > Run with Performance Tool > Zombies. Cela vous permet de voir des objets particuliers et leur nombre de conserver sur une chronologie.

Dov
la source
1
Je peux voir l'option zombies mais elle est grisée. Savez-vous comment il est activé?
Rahul Vyas
@RahulVyas, je n'ai jamais vu ça auparavant, mais avez-vous activé la collecte des ordures? Je pouvais voir que les zombies n'avaient pas de sens dans ce contexte
Dov
J'ai activé le ramasse-miettes dans les paramètres qu'il affiche pris en charge [-fobjc-gc] mais cette option est toujours désactivée. Enfait, seules les 5 dernières options sont activées dans la catégorie des instruments. Une autre idée? Ou est-ce que je fais quelque chose de mal?
Rahul Vyas
@RahulVyas: Désolé, pour être plus clair, je pensais tournais la collecte des ordures hors serait peut - être permettre aux zombies, puisque je ne pense pas qu'il est possible d'avoir un zombie avec la collecte des ordures. Si cela ne le résout pas, je recommanderais de lire la documentation sur les instruments (ils ont de bonnes notes sur chaque instrument) et si vous ne l'avez toujours pas, posez une question ici pour obtenir une plus grande attention (et finalement une réponse) .
Dov
4

Dans Xcode 4.5.2 goto Product -> Edit Scheme -> et sous l'onglet Diagnostics, cochez la case entre Objective C et Enable Zombie Objects et cliquez sur OK

Gani414
la source
3

Pour activer la journalisation Zombie, double-cliquez sur l'exécutable dans le groupe d'exécutables de votre projet Xcode. À ce stade, cliquez sur l'onglet Arguments et dans la Variables to be set in the environment:section, créez une variable appelée NSZombieEnabledet définissez sa valeur sur YES.

DreamOfMirrors
la source
3

Dans XCode 4.0: Pour détecter NSZombie dans les instruments, sélectionnez le simulateur comme cible (ne peut pas détecter NSZomboe sur l'appareil). Exécutez Instruments (CMD + I) et sélectionnez le modèle de trace "Zombies". Prendre plaisir.

Ehud B
la source
2

Dans les préférences de votre exécutable, ajoutez la variable d'environnement NSZombieEnabledet définissez la valeur sur YES.


la source
2

dans ur XCODE (4.3) à côté du bouton de lecture :) (exécuter)

sélectionner: modifier le schéma

la fenêtre de gestion du schéma s'ouvrira

cliquez sur l'onglet Arguments

vous devriez voir: 1- Arguments transmis au lancement 2- Variables d'environnement

à l'intérieur de l'emplacement (2 variables d'environnement) Nom: NSZombieEnabled
Valeur: OUI

Et c'est fait ....

Rabih harb
la source
1

NSZombieEnabled est utilisé pour le débogage de BAD_ACCESS,

activer la variable d'environnement NSZombiesEnabled à partir de la feuille de schémas de Xcode.

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

cette vidéo vous aidera à voir ce que j'essaie de dire.

user2554822
la source
@kleopatra Thanks a mis à jour mes réponses avec le paramètre approprié
user2554822