SIGTRAP
数组越界、类型转换失败、强制解包等引起的崩溃都属于这一种。
Apple官方资料-解决 Swift 运行时错误导致的崩溃 中有提到
SIGSEGV
段错误
当程序试图访问不被允许访问的内存区域(比如,尝试写一块属于操作系统的内存),或以错误的类型访问内存区域(比如,尝试写一块只读内存)
SIGSEGV在很多时候是由于指针越界引起的,但并不是所有的指针越界都会引发SIGSEGV。
SIGABRT
由调用abort函数产生,进程非正常退出
导致SIGABRT的原因,可能有以下几个
- 多次free导致
- 执行abort、assert函数
SIGILL
- 将不正确的数据段写入代码段
- 指令集的演进
- 工具链BUG
- 访存对齐或浮点数格式问题
- 错误排查方法
SIGBUS
由于进程引起了一个总线错误
原因:
- 对齐的读或写
SIGFPE
当一个进程执行了一个错误的算术操作时发送给它的信号
原因:
1.FPE_INTDIV 整数除以零
2.FPE_INTOVF 整数上溢
3.FPE_FLTDIV 浮点除以零
4.FPE_FLTOVF 浮点上溢
5.FPE_FLTUND 浮点下溢
6.FPE_FLTRES 浮点结果不准
7.FPE_FLTINV 无效浮点操作
8.FPE_FLTSUB 浮点下标越界
网友评论