Objective-C exception
Exceptions in Objective-C are used to indicate programming errors detected at runtime such as accessing an array with an index that is out-of-bounds, attempts to mutate immutable objects, not implementing a required method of a protocol, or sending a message which the receiver does not recognize.
- NSInvalidArgumentException
没有对于参数的合法性进行校验 常见的有传入nil作为参数
- NSRangeException
越界异常 主要原因是没有对于索引进行合法性的检查,导致索引落在集合数据的合法范围之外
- NSGenericException
通用异常 最容易出现在foreach操作中,主要原因是在遍历过程中进行了元素的修改
- NSMallocException
内存分配异常 无法分配足够的内存空间,分配一块超大的内存空间就会导致此类的异常
- NSFileHandleOperationException
文件处理异常 对文件进行相关操作时产生了异常,如手机没有足够的存储空间,文件读写权限问题等
Mach exception
EXC_BAD_ACCESS
Could not access memory
1
2Code contains kern_return_t describing error.
Subcode contains bad memory address.EXC_BAD_INSTRUCTION
Instruction failed
1
Illegal or undefined instruction or operand
EXC_ARITHMETIC
Arithmetic exception
1
Exact nature of exception is in code field
EXC_EMULATION
Emulation instruction
1
2Emulation support instruction encountered
Details in code and subcode fields
EXC_SOFTWARE
Software generated exception
1
2
3Exact exception is in code field.
Codes 0 - 0xFFFF reserved to hardware
Codes 0x10000 - 0x1FFFF reserved for OS emulation (Unix)EXC_BREAKPOINT
Trace TRAP, breakpoint, etc.
1
Details in code field.
EXC_SYSCALL
System calls
- EXC_MACH_SYSCALL
Mach system calls.
- EXC_RPC_ALERT
RPC aler
- EXC_CRASH
Abnormal process exit
EXC_RESOURCE
Hit resource consumption limit
1
Exact resource is in code field.
- EXC_GUARD
Violated guarded resource protections
- EXC_CORPSE_NOTIFY
Abnormal process exited to corpse state
- EXC_CORPSE_VARIANT_BIT
bit set for EXC_CORPSE variants of EXC\\
Unix Signal
SIGHUP
用户终端连接(正常或非正常)结束时发出
SIGINT
程序终止(interrupt)信号
SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
SIGILL
执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。
SIGTRAP
由断点指令或其它trap指令产生
SIGABRT
调用abort函数生成的信号,进程非正常退出。
SIGPOLL
当某个事件发送给Pollable Device的时候发送。
SIGIOT
实现相关的硬件异常,一般对应SIGABRT。
SIGEMT
发生仿真器陷阱时发出。
SIGFPE
在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。
SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略
SIGBUS
非法地址, 包括内存地址对齐(alignment)出错
SIGSEGV
试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据。
SIGSYS
非法的系统调用。
SIGPIPE
管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。
SIGALRM
时钟定时信号, 计算的是实际的时间或时钟时间。 alarm函数使用该信号。
SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
SIGURG
有”紧急”数据或out-of-band数据到达socket时产生。
SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行。 本信号不能被阻塞, 处理或忽略。
SIGTSTP
停止进程的运行, 但该信号可以被处理和忽略。
SIGCONT
让一个停止(stopped)的进程继续执行。 本信号不能被阻塞。
SIGCHLD
子进程结束时, 父进程会收到这个信号。
SIGTTIN
当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号。
SIGTTOU
类似于SIGTTIN, 但在写终端(或修改终端模式)时收到。
SIGIO
文件描述符准备就绪, 可以开始进行输入/输出操作。
SIGXCPU
超过CPU时间资源限制。这个限制可以由getrlimit/setrlimit来读取/改变。
SIGXFSZ
当进程企图扩大文件以至于超过文件大小资源限制。
SIGVTALRM
虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间。
SIGPROF
类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间。
SIGWINCH
窗口大小改变时发出。
SIGINFO
收到终端发出的状态请求时发出。
SIGUSR1
留给用户使用
SIGUSR2
留给用户使用
Exception Codes
0xbaaaaaad
用户按住Home键和⾳音量键,获取当前内存状态,不代表崩溃。
0xbad22222
VoIP应⽤用因为恢复得太频繁导致crash。
0x8badf00d
在启动、终⽌止应⽤用或响应系统事件花费过⻓长时间,意为“ate bad food”。
0xc00010ff
因为太烫了被干掉,意为“cool off”。
0xdead10cc
因为在后台时仍然占据系统资源(⽐比如通讯录)被干掉,意为“dead lock”。
0x2bad45ec
应用程序违反安全规则被强制退出。
0xdeadfa11
用户强制退出,意为“dead fall”。(系统无响应时,用户按电源开关和HOME键)