Domanda

Quando ho creato NSZombieEnabled = Yes nulla è scritto nella console. Come posso risolvere questo problema? Oppure mi puoi consigliare tutti gli altri strumenti per un EXC_BAD_ACCESS?

È stato utile?

Soluzione

Si dispone di un incidente vecchio pianura. EXC_BAD_ACCESS significa che l'applicazione ha tentato di accedere ad un indirizzo di memoria che non è valido. Mentre la ragione più tipico per questo in un'applicazione non GC'd Objective-C è un oggetto di messaggistica dopo deallocazione, qualcosa che Zombie Mode rileva, questo incidente particolare, può accadere qualsiasi numero di altri modi (come dimostrato).

Dal momento che l'applicazione si blocca, si dovrebbe avere un backtrace. È necessario inviare che backtrace qui per nessuno di noi per essere in grado di aiutarti ulteriormente.

Come ha detto Brad, eseguire l'applicazione con il debug abilitato. In Xcode, troverete la voce di menu "Run / Debug" sotto il menu "Run". Utilizzare quello. Quando il vostro applicazione si blocca, si dovrebbe vedere una traccia dello stack nell'angolo in alto a sinistra della finestra del debugger.

No, davvero, che fanno compaiono nel debugger. Una foto vale 1000 parole. alt text
(fonte: friday.com )

Altri suggerimenti

"EXC_BAD_ACCESS" non è necessariamente correlato a un'istanza di zombie. Può essere collegato un accesso a un riferimento indefinito, come una variabile locale.

NSArray *array;
[array objectAtIndex:0]; // <- Will throw an error

Modifica NSZombie bandiera solo aiuterà a risolvere il "EXC_BAD_ACCESS" innescata con l'uso di un'istanza di de-allocata.

Al fine di risolvere i bug, è necessario utilizzare il backtrace incidente di individuare la posizione che è sbagliato. Poi, vai a ritroso nel codice e controllare ogni assegnazione e allocazioni.

Inoltre, assicurarsi di inizializzare tutti i puntatori a zero prima di utilizzarli!

Se si utilizza un puntatore senza inizializzarla a zero o di qualsiasi altro oggetto, si stanno propably andando a finire l'accesso a memoria che non è tuo.

Ad esempio il seguente codice darà anche un EXC_BAD_ACCESS che non è rintracciabile utilizza il flag NSZombieEnabled causato dalla ultima riga.

RecordingLocation* closest;

//find the closest recording location
for (...)
{
    //try to find the closest object...
    //suppose we don't find anything so closest is never set.
}

if (closest!=nil)
    NSLog(@"Closest: %f,%f",closest.x,closest.y);

Non capisco come la risposta a questa domanda risponde davvero alla domanda ..

Chiedo io la stessa cosa. utilizzando xcode4 Ho permesso NSZobmieEnabled = YES per fermare quando ho accedere a un oggetto che è stato rilasciato, invece di schiantarsi con EXC_BAD_ACCESS -. che è molto utile

la questione a portata di mano è stato:

"Quando ho creato NSZombieEnabled = Sì nulla è scritto nella console. Come posso risolvere questo problema ...".

avanti semplice e diretto.

sto vivendo lo stesso problema. Xcode si ferma con il debugger ma la console non produce alcun messaggio. mi sarei aspettato qualcosa sulla falsariga di:

"messaggio inviato a un'istanza deallocato ...".

cercare Stack Overflow per EXC_BAD_ACCESS , troverete un certo numero di persone con il stesso problema che avete. La stragrande maggioranza del tempo che ti ha colpito questo, si è verificato problemi di memoria. Se si sta seguendo il protocollo descritto qui o qui , e non riesci a vedere eventuali segnalazioni di messaggi inviati agli oggetti uscito sulla console, potrebbe essere qualcosa di diverso.

Hai provato di avviare l'applicazione nel debugger (Run | Debug - Punti di interruzione On)? Non appena si preme l'EXC_BAD_ACCESS, il debugger dovrebbe fermarsi. Se si guarda al backtrace visualizzata nel debugger (Run | Debugger)., Potrebbe mostrare dove si è verificato l'errore

Come ho appena trascorso un felice 20 minuti a fissare questo con NSZombieEnabled non funziona, ho pensato di aggiungi a causerà un EXC_BAD_ACCESS

NSArray *arr = [NSArray arrayWithObjects:@"@dog","@cat",nil];

Si noti la mancante '@' al secondo param. Non l'ho fatto: -)

Ho avuto un'esperienza diversa con EXC_BAD_ACCESS, quindi vorrei condividere.

Come indicato nelle domande, anche se NSZombieEnabled è stata controllata, nulla è stato scritto per la console. Dopo diverse ore di lotta nel simulatore, ho deciso di installare al dispositivo. Il messaggio di errore che ho ricevuto da debug con il dispositivo era più disponibile.

Alla fine, mi sono accorto che mi stavo errore EXC_BAD_ACCESS e il comportamento strano perché I rinominato un paio di file XI ter il giorno prima. Ho selezionato l'oggetto 'View Controller' per il file MainWindow.xib e corretto il NIB Nome di proprietà. Poi, tutto ha funzionato senza intoppi.

Penso Non tutti EXC_BAD_ACCESS è trovato da NSZombie Abilitazione ..
Poiché alcuni casi, inoltre, non sto ottenendo risultati durante l'utilizzo di zombie ..
io soltanto EXC_BAD_ACCESS correlata all'uso di oggetto rilasciata può visualizzare attivando zombie.

E una questione più ho notato durante l'utilizzo di zombie è: a volte anche causare crash su di debug. Un caso ho preso caduto, mostrando:
*** -[MagazineWebview respondsToSelector:]: message sent to deallocated instance 0x58ce2a0
Succede solo quando abilitazione NSZombie.

Quello che sto facendo è, On
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
Ho comunicato l'oggetto corrente "MagazineWebview" e caricare il dato [URL richiesta] in un altro oggetto "MagazineWebview". Per achiving mie alcune funzionalità ...

grazie

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