EXC_BAD_ACCESS
不會生成異常,因此您的第一個功能不適用於此案例。它產生一個信號SIGSEGV
或SIGBUS
。
請參閱Handling unhandled exceptions and signals by Cocoa with Love。
更新
我只是檢查LLDB的源代碼。它可能是TARGET_EXC_BAD_ACCESS
= 0x91。
在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
和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;
}
看到這個職位:http://stackoverflow.com/questions/1128539/nssetuncaughtexceptionhandler-not-catch-所有錯誤的iPhone – Lefteris 2012-04-25 12:33:24
好吧,我已經包括SIGSEGV,但它仍然沒有捕獲EXC_BAD ACCESS:/ hmmmm ...但感謝評論! :) – 2012-04-25 12:37:07