EXC_BAD_ACCESS automatic handling EXC_BAD_ACCESS automatic handling xcode xcode

EXC_BAD_ACCESS automatic handling


EXC_BAD_ACCESS doesn't generate an exception so you first function doesn't work with the case. It generates a signal SIGSEGV or SIGBUS.

Please refer to Handling unhandled exceptions and signals by Cocoa with Love.

Update

I just checked the source code of LLDB. It might be TARGET_EXC_BAD_ACCESS = 0x91.

In RNBRemote.h:

/* We translate the /usr/include/mach/exception_types.h exception types   (e.g. EXC_BAD_ACCESS) to the fake BSD signal numbers that gdb uses   in include/gdb/signals.h (e.g. TARGET_EXC_BAD_ACCESS).  These hard   coded values for TARGET_EXC_BAD_ACCESS et al must match the gdb   values in its include/gdb/signals.h.  */#define TARGET_EXC_BAD_ACCESS      0x91#define TARGET_EXC_BAD_INSTRUCTION 0x92#define TARGET_EXC_ARITHMETIC      0x93#define TARGET_EXC_EMULATION       0x94#define TARGET_EXC_SOFTWARE        0x95#define TARGET_EXC_BREAKPOINT      0x96

and in RNBRemote.cpp:

// Translate any mach exceptions to gdb versions, unless they are// common exceptions like a breakpoint or a soft signal.switch (tid_stop_info.details.exception.type){    default:                    signum = 0; break;    case EXC_BREAKPOINT:        signum = SIGTRAP; break;    case EXC_BAD_ACCESS:        signum = TARGET_EXC_BAD_ACCESS; break;    case EXC_BAD_INSTRUCTION:   signum = TARGET_EXC_BAD_INSTRUCTION; break;    case EXC_ARITHMETIC:        signum = TARGET_EXC_ARITHMETIC; break;    case EXC_EMULATION:         signum = TARGET_EXC_EMULATION; break;    case EXC_SOFTWARE:        if (tid_stop_info.details.exception.data_count == 2 &&            tid_stop_info.details.exception.data[0] == EXC_SOFT_SIGNAL)            signum = tid_stop_info.details.exception.data[1];        else            signum = TARGET_EXC_SOFTWARE;        break;}