Porque é que a minha cacau programa ficar EXC_BAD_ACCESS durante a inicialização?

StackOverflow https://stackoverflow.com/questions/64881

  •  09-06-2019
  •  | 
  •  

Pergunta

Durante a carga de minha cacau aplicação, o meu programa de falha com a mensagem de EXC_BAD_ACCESS.O rastreamento de pilha não é útil.Qualquer pistas sobre como eu posso encontrar o problema?

Foi útil?

Solução

Eu já vi vezes em que isso pode acontecer quando você está tentando acessar um objeto que você não conservar adequadamente, tanto que não aponta para uma cópia válida do seu objeto ou dos seus apontando para um objeto de outro tipo.A colocação de pontos de interrupção precoce e analisar os objectos como você passo a passo através de inicialização usando o po e de impressão no gdb é a sua melhor aposta.

Outras dicas

Este é normalmente um indicativo de um gerenciamento de memória erro.

Certifique-se de que todos os seus tomada de declarações de seguir as melhores práticas:

@interface MyClass : MySuperclass {
    UIClass *myOutlet;
}
@property (nonatomic, retain) IBOutlet UIClass *myOutlet;
@end

Este formato garante que você obtenha o gerenciamento de memória direito de, em qualquer plataforma, qualquer superclasse.

Verifique qualquer awakeFromNib métodos para garantir que você não está mais liberador de objetos etc.

Uma nova resposta para um velho thread...no XCode 4 a forma mais eficaz de diagnosticar EXC_BAD_ACCESS exceções é a utilização de Instrumentos para o perfil do seu aplicativo (do XCode clique Produto/Perfil e escolha Zumbis).Isto irá ajudá-lo a identificar as mensagens enviadas para desalocada objetos.

Para adicionar:a principal razão para o desarquivamento de falha é esquecer "retorno a si mesmo;" de -init " de uma classe personalizada.Dói muito :(

Verificação de registo da consola ( Aplicações/Utilitários/Console.app ) .Quando o programa trava na inicialização, e há algo de errado com a inicialização, ele sempre escreve algumas mensagens de erro útil lá, antes de congelar.

Este é um possível motivo.Há um IBOutlet objeto que não está sendo inicializado e a mensagem está a ser invocada no nada.O rastreamento de pilha pode ter esta aparência:

#0    0x90a594c7 in objc_msgSend
#1    0xbffff7b8 in ??
#2    0x932899d8 in loadNib
#3    0x932893d9 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:]
#4    0x9328903a in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:]
#5    0x93288f7c in +[NSBundle(NSNibLoading) loadNibNamed:owner:]
#6    0x93288cc3 in NSApplicationMain
#7    0x00009f80 in main at main.mm:17

Desde o rastreamento de pilha não é útil, você terá que percorrer o código para localizar o erro.Se por algum motivo você não é capaz de definir pontos de interrupção no início de sua execução, tente inserir alguns Depurador();chama que vai quebrar o depurador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top