Domanda

Durante il caricamento della mia applicazione cacao, il mio programma si blocca con il messaggio EXC_BAD_ACCESS.L'analisi dello stack non è utile.Qualche indizio su come posso trovare il problema?

È stato utile?

Soluzione

Ho visto volte in cui ciò può accadere quando stai tentando di accedere a un oggetto che non hai conservato correttamente, quindi non punta a una copia valida del tuo oggetto o punta a un oggetto di un altro tipo.Posizionare i punti di interruzione in anticipo e analizzare gli oggetti durante l'avvio utilizzando po e stampa in gdb è la soluzione migliore.

Altri suggerimenti

Questo è in genere indicativo di un errore di gestione della memoria.

Assicurati che tutte le dichiarazioni sui punti vendita seguano le migliori pratiche:

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

Questo formato garantisce la gestione della memoria direttamente su qualsiasi piattaforma con qualsiasi superclasse.

Controlla qualsiasi awakeFromNib metodi per assicurarti di non rilasciare eccessivamente oggetti, ecc.

Una nuova risposta ad un vecchio thread...in XCode 4 il modo più efficace per diagnosticare le eccezioni EXC_BAD_ACCESS è utilizzare Strumenti per profilare la tua app (da XCode fai clic su Prodotto/Profilo e scegli Zombies).Ciò ti aiuterà a identificare i messaggi inviati agli oggetti deallocati.

Aggiungere:La ragione principale per un fallimento inarrualing è dimenticare "restituire me stesso;" dall'init di una classe personalizzata.Fa molto male :(

Controlla il registro della console (Applicazioni/Utility/Console.app).Quando il programma si blocca all'avvio e c'è qualcosa che non va con l'inizializzazione, spesso scrive lì alcuni messaggi di errore utili, prima che si blocchi.

Questa è una possibile ragione.C'è un oggetto IBOutlet che non viene inizializzato e viene richiamato un messaggio su nil.L'analisi dello stack potrebbe assomigliare a questa:

#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

Poiché l'analisi dello stack non è utile, dovrai scorrere il codice per trovare l'errore.Se per qualche motivo non riesci a impostare i punti di interruzione all'inizio dell'esecuzione, prova a inserire qualche Debugger();chiamate che interromperanno il debugger.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top