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;}