Como habilitar o NSZombie no Xcode?

302

Eu tenho um aplicativo que está travando sem rastreamento de erro. Eu posso ver parte do que está acontecendo se eu depurar, mas não consigo descobrir qual objeto é "zumbi".

Alguém sabe como habilitar o NSZombie no Xcode 4?

Jason
fonte

Respostas:

440

Variáveis ​​de ambiente agora fazem parte do "esquema".

Para editar o esquema e ativar zumbis:

  • No menu "Produto", selecione "Editar esquema".

  • Vá para o estágio "Run Foo.app" no painel esquerdo e a guia "Arguments" à direita.

  • Adicione NSZombieEnabledà seção "Variáveis ​​de ambiente" e defina o valor YEScomo, como você poderia no Xcode 3.


No Xcode 4.1 e acima , também há uma caixa de seleção na guia "Diagnóstico" do estágio "Executar" para "Ativar objetos zumbis".


Com o Xcode 6.4:

Captura de tela

一 二三
fonte
5
Não interrompe a chamada para o objeto desalocado no dispositivo, alguma maneira de fazer isso acontecer?
jjxtra
95
Ele mudou novamente na versão 4.2, veja minha resposta abaixo. Vá para Produto-> Editar esquema-> Diagnósticos
Moshe Kravchik
No Xcode, no menu Ajuda na parte superior (a última à direita), procure por "Editar esquema", ele apontará você na direção certa todas as vezes em qualquer versão.
Unom
Se habilitarmos esse recurso NSZombieEnabled em nosso aplicativo, lançaremos o aplicativo para armazenar ..? Porque vi um post dizendo que não é uma boa prática lançar para armazenar quando ativamos esse recurso.
SURESH SANKE
2
Para os novatos que vem depois, no Xcode 6.1 você vai menu Product> guia Esquema Editar esquema> Diagnóstico> opção Enable Zombie Objetos
Joshua dança
146

Encontrei o mesmo problema com a solução de problemas EXC_BAD_ACCESS e tive dificuldade para encontrar a configuração com o Xcode 4.2 (o mais recente que vem com o iOS5 SDK). A Apple continua movendo as coisas e as configurações não estão mais onde costumavam estar.

Felizmente, eu o encontrei e funciona para o dispositivo, não apenas para o Simulator. Você precisa abrir o menu Produto no Xcode, selecionar Editar esquema e escolher a guia Diagnóstico. Lá você tem "Ativar objetos zumbis". Uma vez selecionado e executado no depurador, você apontará para o objeto liberado duas vezes! Aproveitar!

Em resumo

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Moshe Kravchik
fonte
2
No Xcode, no menu Ajuda na parte superior (a última à direita), procure por "Editar esquema", ele apontará você na direção certa todas as vezes em qualquer versão.
Unom
43

Produto> O perfil iniciará os Instrumentos e você deverá ter um "Modelo de Rastreio" chamado "Zumbis". No entanto, esse modelo de rastreamento estará disponível apenas se o destino de compilação atual for o simulador - ele não estará disponível se você tiver o destino definido no seu dispositivo iOS.

Outra coisa a se notar é que não existe um instrumento Zombies real na biblioteca de instrumentos. O modelo de rastreamento de zumbis consiste, na verdade, no instrumento Alocações com o conjunto de configurações de ativação "Ativar detecção do NSZombie".

Shane Fitzgibbon
fonte
13
"No entanto, este modelo de rastreio estará disponível apenas se o destino de compilação atual for o simulador". Obrigado!
precisa saber é o seguinte
Obrigado, era o que eu estava procurando!
Cliff Ribaudo
No Xcode, no menu Ajuda na parte superior (a última à direita), procure por "Editar esquema", ele apontará você na direção certa todas as vezes em qualquer versão.
Unom
25

É uma simples questão de definir uma variável de ambiente no seu executável (NSZombieEnabled = YES)e depois executar / depurar seu aplicativo normalmente. Se você enviar uma mensagem para um zumbi, seu aplicativo falhará / será interrompido no depurador e NSLoguma mensagem para você.

Para obter mais informações, consulte esta página do CocoaDev: http://www.cocoadev.com/index.pl?NSZombieEnabled

Além disso, esse processo se tornará muito mais fácil com o lançamento do 10.6 e as próximas versões do Xcode e Instruments. Apenas dizendo'. =)

Dave DeLong
fonte
Totalmente de acordo. O novo instrumento Zombies é muito bom.
Quinn Taylor
22

Produto> O perfil exibirá Instrumentos. Selecione zumbis no painel e enlouqueça.

garageàtrois
fonte
5
@jluebbert Eu diria que se esforçar mais, porque eu definitivamente vê-lo, correndo Xcode 4,02
garageàtrois
16

Vá para Produto - Esquema - editar esquema - Argumentos - Conjunto de variáveis ​​de ambiente NSZombieEnabled = YES

insira a descrição da imagem aqui

insira a descrição da imagem aqui

PJR
fonte
12

No xcode 4.2

Vá para Produto -> esquema de edição -> clique em Executar yourappname.app -> Diagonostics -> Ativar objeto Zombie.

Dax
fonte
6

A partir do Xcode 3.2.5 e Snow Leopard (Mac OS X 10.6), você pode executar o código através do instrumento Zombies: Run > Run with Performance Tool > Zombies. Isso permite que você veja objetos específicos e suas contagens contidas em uma linha do tempo.

Dov
fonte
1
Eu posso ver a opção de zumbis, mas está acinzentada. Você sabe como ele está ativado?
Rahul Vyas
@RahulVyas, eu nunca vi isso antes, mas você tem a coleta de lixo ativada? Eu podia ver Zombies não fazer sentido nesse contexto
Dov
Ativei a coleta de lixo nas configurações mostradas com suporte [-fobjc-gc], mas essa opção ainda está desativada. Na verdade, apenas as 5 últimas opções estão ativadas na categoria de instrumentos. Alguma outra ideia? Ou estou fazendo algo errado?
Rahul Vyas
@RahulVyas: Desculpe, para ser mais claro, eu pensei transformando coleta de lixo fora , possivelmente, permitir Zombies, desde que eu não acho que é possível ter um zumbi com coleta de lixo. Se isso não resolver, recomendo a leitura da documentação do Instruments (eles têm boas anotações em cada instrumento) e, se você ainda não o recebeu, poste uma pergunta aqui para obter mais atenção (e, finalmente, uma resposta) .
Dov
4

No Xcode 4.5.2, vá para Produto -> Editar esquema -> e Na guia Diagnósticos, marque a caixa de seleção entre o Objetivo C e Ativar objetos zumbis e clique em OK

Gani414
fonte
3

Para habilitar o log do Zombie, clique duas vezes no executável no grupo de executáveis ​​do seu projeto do Xcode. Nesse ponto, clique na guia Argumentos e, na Variables to be set in the environment:seção, faça uma variável chamada NSZombieEnablede defina seu valor como YES.

DreamOfMirrors
fonte
3

No XCode 4.0: Para detectar o NSZombie nos Instrumentos, selecione o Simulador como seu alvo (não é possível detectar o NSZomboe no dispositivo). Execute instrumentos (CMD + I) e selecione o modelo de rastreamento "Zumbis". Aproveitar.

Ehud B
fonte
2

Nas preferências do seu add executável a variável de ambiente NSZombieEnablede definir o valor para YES.


fonte
2

no seu XCODE (4.3) ao lado do botão play :) (executar)

selecionar: editar esquema

a janela de gerenciamento do esquema será aberta

clique na guia Argumentos

Você deve ver: 1 - Argumentos transmitidos no lançamento 2 - Variáveis ​​de ambiente

dentro do local (2 variáveis ​​de ambiente) Nome: NSZombieEnabled
Valor: YES

E está feito ....

Rabih harb
fonte
1

NSZombieEnabled é usado para depuração BAD_ACCESS,

ative a variável de ambiente NSZombiesEnabled da planilha de esquemas do Xcode.

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

este vídeo ajudará você a ver o que estou tentando dizer.

user2554822
fonte
@kleopatra Obrigado atualizou minhas respostas com a configuração apropriada #
user2554822