Come abilitare NSZombie in Xcode?


302

Ho un'app che si arresta in modo anomalo senza traccia di errori. Riesco a vedere parte di ciò che sta accadendo se eseguo il debug, ma non riesco a capire quale oggetto sia "zombi".

Qualcuno sa come abilitare NSZombie in Xcode 4?

Risposte:


440

Le variabili d'ambiente fanno ora parte dello "schema".

Per modificare lo schema e attivare gli zombi:

  • Nel menu "Prodotto", seleziona "Modifica schema".

  • Vai allo stage "Esegui Foo.app" nel riquadro a sinistra e la scheda "Argomenti" a destra.

  • Aggiungi NSZombieEnabledalla sezione "Variabili d'ambiente" e imposta il valore su YES, come puoi fare con Xcode 3.


In Xcode 4.1 e versioni successive , c'è anche una casella di controllo nella scheda "Diagnostica" della fase "Esegui" per "Abilitare oggetti zombi".


Con Xcode 6.4:

Immagine dello schermo


5
Non si interrompe la chiamata all'oggetto deallocato sul dispositivo, in qualche modo per farlo accadere?
jjxtra,

95
È cambiato di nuovo in 4.2, vedere la mia risposta di seguito. Vai a Prodotto-> Modifica schema-> Diagnostica
Moshe Kravchik,

In Xcode, nel menu Guida in alto (l'ultimo a destra) cerca "Modifica schema" ti indicherà ogni volta nella giusta direzione in qualsiasi versione.
unom

Se abilitiamo questa funzione NSZombieEnabled sulla nostra app, dovremo rilasciare l'app per memorizzare ...? Perché ho visto un post che diceva che non è una buona pratica rilasciare per archiviare quando abilitiamo questa funzione.
SURESH SANKE

2
Per i principianti che seguono, in Xcode 6.1 vai al menu Prodotto> Schema-Modifica schema> Scheda Diagnostica> Casella di controllo Abilita oggetti zombi
Joshua Dance

146

Ho riscontrato lo stesso problema con la risoluzione dei problemi EXC_BAD_ACCESS e ho avuto difficoltà a trovare l'impostazione con Xcode 4.2 (l'ultimo fornito con iOS5 SDK). Apple continua a spostare le cose e le impostazioni non sono più dove erano prima.

Fortunatamente l'ho trovato e funziona per il dispositivo, non solo per il simulatore. Devi aprire il menu Prodotto nell'Xcode, selezionare Modifica schema e quindi scegliere la scheda Diagnostica. Lì hai "Abilita oggetti zombi". Una volta selezionato ed eseguito nel debugger ti indirizzerà al doppio oggetto rilasciato! Godere!

In breve

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects

2
In Xcode, nel menu Guida in alto (l'ultimo a destra) cerca "Modifica schema" ti indicherà ogni volta nella giusta direzione in qualsiasi versione.
unom

43

Prodotto> Profilo avvierà Instruments e quindi dovresti trovare un "modello di traccia" chiamato "Zombi". Tuttavia, questo modello di traccia è disponibile solo se la destinazione di build corrente è il simulatore, non sarà disponibile se la destinazione è impostata sul dispositivo iOS.

Un'altra cosa da notare è che non esiste uno strumento Zombi nella libreria degli strumenti. Il modello di traccia degli zombi è in realtà costituito dallo strumento Allocazioni con il set di configurazione di avvio "Abilita rilevamento NSZombie".


13
"Tuttavia, questo modello di traccia è disponibile solo se la destinazione di compilazione corrente è il simulatore". Grazie!
ajh158,

Grazie, era quello che stavo cercando!
Cliff Ribaudo,

In Xcode, nel menu Guida in alto (l'ultimo a destra) cerca "Modifica schema" ti indicherà ogni volta nella giusta direzione in qualsiasi versione.
unom

25

È una semplice questione di impostare una variabile di ambiente sul tuo eseguibile (NSZombieEnabled = YES)e quindi eseguire / eseguire il debug della tua app normalmente. Se mandi un messaggio a uno zombi, la tua app andrà in crash / romperà il debugger e NSLogun messaggio per te.

Per ulteriori informazioni, consulta questa pagina CocoaDev: http://www.cocoadev.com/index.pl?NSZombieEnabled

Inoltre, questo processo diventerà molto più semplice con il rilascio di 10.6 e le versioni successive di Xcode e Instruments. Sto solo dicendo '. =)


Totalmente d'accordo. Il nuovo strumento Zombies è molto carino.
Quinn Taylor,

22

Prodotto> Profilo farà apparire Strumenti. Seleziona gli zombi dal pannello e impazzisci.


5
@jluebbert Direi di provare di più perché sicuramente lo vedo, eseguendo Xcode 4.02
garageàtrois

16

Vai a Prodotto - Schema - modifica schema - Argomenti - Variabili d'ambiente impostate NSZombieEnabled = YES

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


12

In xcode 4.2

Vai a Prodotto -> modifica schema -> fai clic su Esegui yourappname.app -> Diagonostics -> Abilita oggetto Zombie.



6

Come di Xcode 3.2.5 e Snow Leopard (Mac OS X 10.6), è possibile eseguire il codice attraverso lo strumento Zombies: Run > Run with Performance Tool > Zombies. Ciò consente di vedere oggetti particolari e i relativi conteggi di conservazione su una sequenza temporale.


1
Vedo l'opzione di zombi ma è disattivata. Sai come è abilitato?
Rahul Vyas,

@RahulVyas, non l'ho mai visto prima, ma hai attivato la raccolta dei rifiuti? Potevo vedere gli Zombi non avere senso in quel contesto
Dov

Ho attivato la garbage collection nelle impostazioni che mostra supportato [-fobjc-gc] ma quell'opzione è disabilitata. Infatti solo le ultime 5 opzioni sono abilitate nella categoria strumenti. Qualche altra idea? O sto facendo qualcosa di sbagliato?
Rahul Vyas,

@RahulVyas: Mi dispiace, per essere più chiari, ho pensato che disabilitare la raccolta dei rifiuti avrebbe probabilmente permesso agli zombi, dal momento che non penso che sia possibile avere uno zombi con la raccolta dei rifiuti. Se ciò non lo risolve, consiglierei di leggere la documentazione di Instruments (hanno una buona scrittura su ogni strumento) e se non l'hai ancora ottenuto, pubblica qui una domanda per ottenere maggiore attenzione (e alla fine una risposta) .
Dov

4

In Xcode 4.5.2 vai a Prodotto -> Modifica schema -> e nella scheda Diagnostica seleziona la casella di controllo tra Obiettivo C e Abilita oggetti zombi e fai clic su OK


3

Per abilitare la registrazione di Zombie, fai doppio clic sul file eseguibile nel gruppo eseguibili del tuo progetto Xcode. A questo punto fai clic sulla scheda Argomenti e nella Variables to be set in the environment:sezione, crea una variabile chiamata NSZombieEnablede imposta il suo valore su YES.


3

In XCode 4.0: per rilevare NSZombie in Instruments, selezionare il simulatore come destinazione (non è possibile rilevare NSZomboe sul dispositivo). Eseguire Strumenti (CMD + I) e selezionare il modello di traccia "Zombi". Godere.


2

Nelle preferenze del tuo eseguibile aggiungi la variabile di ambiente NSZombieEnablede imposta il valore su YES.


2

nel tuo XCODE (4.3) accanto al pulsante di riproduzione :) (esegui)

seleziona: modifica schema

si aprirà la finestra di gestione dello schema

fai clic sulla scheda Argomenti

dovresti vedere: 1- Argomenti passati all'avvio 2- variabili d'ambiente

all'interno del luogo (2- variabili d'ambiente) Nome: NSZombieEnabled
Valore: SÌ

Ed è fatto ....


1

NSZombieEnabled viene utilizzato per il debug di BAD_ACCESS,

abilitare la variabile d'ambiente NSZombiesEnabled dal foglio degli schemi di Xcode.

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

questo video ti aiuterà a vedere cosa sto cercando di dire.


@kleopatra Thanks ha aggiornato le mie risposte con l'impostazione appropriata
user2554822
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.