');

iOS Debug di EXC_BAD_ACCESS

Esempio

EXC_BAD_ACCESS significa che il processo ha tentato di accedere alla memoria in modo non valido, come il dereferenziamento di un puntatore NULL o la scrittura nella memoria di sola lettura. Questo è il tipo più difficile di arresto anomalo del debug, perché di solito non ha un messaggio di errore e alcuni arresti anomali possono essere molto difficili da riprodurre e / o verificarsi in codice completamente estraneo al problema. Questo errore è molto raro in Swift, ma se si verifica, spesso è possibile ottenere arresti più facili da debug riducendo le ottimizzazioni del compilatore.

La maggior parte EXC_BAD_ACCESS errori EXC_BAD_ACCESS sono causati dal tentativo di dereferenziare un puntatore NULL . Se questo è il caso, l'indirizzo elencato nella freccia rossa sarà solitamente un numero esadecimale che è inferiore a un normale indirizzo di memoria, spesso 0x0 . Impostare i punti di interruzione nel debugger o aggiungere istruzioni printf / NSLog occasionali per scoprire perché il puntatore è NULL .

Un EXC_BAD_ACCESS che si verifica in modo meno affidabile o non ha alcun senso potrebbe essere il risultato di un problema di gestione della memoria. I problemi comuni che possono causare questo sono:

  • Usando la memoria che è stata deallocata
  • Cercando di scrivere oltre la fine di un array C o di un altro tipo di buffer
  • Utilizzando un puntatore che non è stato inizializzato

Nella sezione Diagnostics dell'Editor schema, Xcode include alcuni strumenti utili per aiutare a risolvere i problemi di memoria:

inserisci la descrizione dell'immagine qui

Address Sanitizer aggiunge molti controlli che interrompono l'app ogni volta che si verificano problemi di memoria e forniscono un utile messaggio di errore che descrive esattamente cosa è successo. Zombie Objects rileva problemi con oggetti Objective-C deallocati, ma non si dovrebbe avere questo tipo di problemi con il conteggio dei riferimenti automatico attivato.