2014-11-13 2 views
6

Я использую Objective C на iOS около месяца, но имею много предшествующего опыта на C++.Что означает параметр кода в EXC_BAD_ACCESS?

Мое понимание EXC_BAD_ACCESS заключается в том, что это по существу Segmentation Fault, то есть попытка доступа к памяти за пределами разрешенной области. Хотя, как ни странно, я также видел SIGSEGV где-то в аварийном приложении iOS. Я заметил, что в этом исключении есть параметр кода (например, code=1), и мне интересно, что именно это означает.

Я ткнул гугл и не могу найти официальную документацию по этой ошибке, and apparently I'm not alone. Кто-нибудь знает, что здесь означает параметр кода?

ответ

6

Если вы посмотрите на журнал аварии, которая генерируется на вашем устройстве, вы увидите:

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

Для дальнейшего описания параметра code, связанного с исключением, вы можете обратиться к usr/include/mach/kern_return.h. Он предоставляет умеренно читаемые имена констант наряду с короткими комментариями, связанными с постоянными значениями.

Самый быстрый способ открыть этот файл - ввести константу KERN_INVALID_ADDRESS в свой файл Xcode и выбрать «Перейти к определению». ;)

FYI: code=1 относится непосредственно к KERN_INVALID_ADDRESS. В комментариях, связанных с этой константой, говорится:

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

Большое значение. Я бы подумал, что Apple будет документировать это в своих документах. –

+0

Я думаю, что единственное разумное место для их документирования - это документация ядра Mach. Документация, которая начинается со страницы под заголовком [Keep Out] (https://developer.apple.com/library/mac/documentation/ Darwin/Conceptual/KernelProgramming/keepout/keepout.html # // apple_ref/doc/uid/TP30000905-CH205-BEHJDFCA) –

+0

Имеет смысл удержать разработчиков от написания кода пространства ядра, но это связано с приложениями пространства пользователя, взаимодействующими с пространства ядра. Я бы подумал, что правильная интерпретация OS API и возвратов будет хорошо документирована. –

Смежные вопросы