2014-11-13 10 views
6

Ho usato Objective C su iOS per circa un mese, ma ho un sacco di esperienza C++ precedente.Che cosa significa il parametro di codice in EXC_BAD_ACCESS?

La mia comprensione di EXC_BAD_ACCESS è che è essenzialmente un Segmentation Fault, ovvero un tentativo di accedere alla memoria al di fuori dell'area consentita. Anche se abbastanza stranamente ho visto anche SIGSEGV in un punto specifico di un'app iOS in crash. Ho notato che esiste un parametro di codice (ad esempio code=1) come parte di questa eccezione e mi chiedo cosa significhi specificamente quel codice.

Ho sondato google e non riesco a trovare documentazione formale su questo errore, and apparently I'm not alone. Qualcuno sa cosa significa il parametro di codice qui?

risposta

6

Se si guarda il registro incidente che ha generato sul dispositivo, si vedrà:

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at <some address> 

Per un'ulteriore descrizione del parametro code associato con un'eccezione, è possibile fare riferimento a usr/include/mach/kern_return.h. Fornisce nomi costanti leggibili con moderazione e brevi commenti associati ai valori costanti.

Il modo più veloce per aprire quel file è digitare la costante KERN_INVALID_ADDRESS nel file Xcode e scegliere "Vai alla definizione". ;)

FYI: code=1 si riferisce direttamente a KERN_INVALID_ADDRESS. Il commento blurb associato a questa costante legge:

/* Specified address is not currently valid. */ 
+0

Molto apprezzato. Penserei che Apple avrebbe documentato questo nei loro documenti. –

+0

Penso che l'unico modo ragionevole per loro di documentare questo sarebbe nella loro documentazione del kernel Mach .. una documentazione che inizia con una pagina intitolata [Keep Out] (https://developer.apple.com/library/mac/documentation/ Darwin/Concettuale/KernelProgrammazione/keepout/keepout.html # // apple_ref/doc/uid/TP30000905-CH205-BEHJDFCA) –

+0

Ha senso scoraggiare gli sviluppatori dalla scrittura del codice spaziale del kernel, ma questo ha a che fare con le applicazioni dello spazio utente che interagiscono con spazio del kernel. Penserei che la corretta interpretazione delle API e dei ritorni del sistema operativo sarebbe ben documentata. –

Problemi correlati