2014-11-13 18 views
6

Używam Objective C na iOS od około miesiąca, ale mam dużo wcześniejszego doświadczenia w C++.Co oznacza parametr kodu w EXC_BAD_ACCESS?

Moje rozumienie EXC_BAD_ACCESS polega na tym, że zasadniczo jest to Segmentation Fault, tj. Próba dostępu do pamięci poza dozwolonym regionem. Co ciekawe, widziałem także SIGSEGV specjalnie w przypadku awarii aplikacji na iOS. Zauważam, że w ramach tego wyjątku jest parametr kodu (np. code=1) i zastanawiam się, co ten konkretny kod oznacza.

Pobiegłem po Google i nie mogę znaleźć formalnej dokumentacji tego błędu, and apparently I'm not alone. Czy ktoś wie, co oznacza tutaj parametr kodu?

Odpowiedz

6

Jeśli spojrzeć na dzienniku katastrofy, który jest generowany w urządzeniu, zobaczysz:

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

Dalszy opis parametru code związanego z wyjątkiem, można zwrócić się do usr/include/mach/kern_return.h. Zapewnia umiarkowanie czytelne stałe nazwy wraz z krótkimi komentarzami związanymi z wartościami stałymi.

Najszybszym sposobem na otwarcie tego pliku jest wpisanie stałej KERN_INVALID_ADDRESS w pliku Xcode i wybranie "Przejdź do definicji". ;)

FYI: code=1 odnosi się bezpośrednio do KERN_INVALID_ADDRESS. Komentarz blurb związany z tą stałą brzmi:

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

Bardzo doceniane. Myślę, że Apple miałby to również udokumentować w swoich dokumentach. –

+0

Myślę, że jedynym rozsądnym miejscem do udokumentowania tego będzie dokumentacja jądra Macha. Dokumentacja zaczynająca się od strony [Keep Out] (https://developer.apple.com/library/mac/documentation/ Darwin/Conceptual/KernelProgramming/keepout/keepout.html # // apple_ref/doc/uid/TP30000905-CH205-BEHJDFCA) –

+0

Sensowne jest powstrzymanie programistów od pisania kodu przestrzeni jądra, ale ma to związek z aplikacjami przestrzeni użytkownika współdziałającymi z przestrzeń jądra. Wydaje mi się, że właściwa interpretacja interfejsów API i zwrotów OS będzie dobrze udokumentowana. –