一、SIG 异常、内存报错
1、SIGABRT
在IOS中未被捕获的Objective-C异常(NSException),导致程序向自身发送了SIGABRT信号而崩溃。
2、SIGSEGV
SIGSEGV是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。表示指针所对应的地址是无效地址,没有物理内存对应该地址。
.invalid memory acdess 不合法的内存访问(内存段错误)
.访问已经释放的内存,无效的内存地址引用信号。(引用指针已被释放或者回收,但是该指针未被置为null,即 野指针。)
.试图对只读映射区域进行写操作
3、SEGV_ACCERR
对映射的对象没有权限,可能是野指针,该对象已经释放,又调用该对象的错误。
4、SEGV_MAPERR
地址没有映射到对象
二、SIGBUS总线错误分类
1、BUS—OBJERR
硬件故障
2、BUS—ADRERR
不存在的物理地址,Linux平台上执行malloc(),如果没有足够的内存空间,linux不是让malloc()失败返回,否则向当前进程分发SIGBUS信号。
3、BUS_ADRALN
未对齐的内存,ARM不支持非对齐的内存访问,要求对齐访问,否则向当前进程发送SIGBUS信号。
SIGBUS和SIGSEGV信号一样,可以正常捕获。SIGBUS的缺省行为是终止当前进程,并产生core dump。
三、SIGBUS和SIGSEGV信号一般区别
1、SIGBUS(Bus error)一位置指针所对应的地址是有效地址,但是总线不能正常使用该指针。通常是未对齐的数据访问所致。
2、SIGSEGV 意味着指针所对应的地址是无效地址,没有物理内存对应该地址。