Crash analyzing
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 memoryCode contains kern_return_t describing error. Subcode contains bad memory address.
-
EXC_BAD_INSTRUCTION
Instruction failedIllegal or undefined instruction or operand
-
EXC_ARITHMETIC
Arithmetic exceptionExact nature of exception is in code field
-
EXC_EMULATION
Emulation instructionEmulation support instruction encountered Details in code and subcode fields
-
EXC_SOFTWARE
Software generated exceptionExact 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.Details in code field.
EXC_SYSCALL
System calls
- EXC_MACH_SYSCALL
Mach system calls.
- EXC_RPC_ALERT
RPC alert
- EXC_CRASH
Abnormal process exit
-
EXC_RESOURCE
Hit resource consumption limitExact 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
用戶終端連接(正逞阆纾或非正常)結束時發(fā)出
SIGINT
程序終止(interrupt)信號SIGQUIT
和SIGINT類似, 但由QUIT字符(通常是Ctrl-)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上類似于一個程序錯誤信號姑荷。SIGILL
執(zhí)行了非法指令. 通常是因為可執(zhí)行文件本身出現錯誤, 或者試圖執(zhí)行數據段. 堆棧溢出時也有可能產生這個信號耐量。SIGTRAP
由斷點指令或其它trap指令產生SIGABRT
調用abort函數生成的信號飞蚓,進程非正常退出。SIGPOLL
當某個事件發(fā)送給Pollable Device的時候發(fā)送廊蜒。SIGIOT
實現相關的硬件異常趴拧,一般對應SIGABRT。SIGEMT
發(fā)生仿真器陷阱時發(fā)出山叮。SIGFPE
在發(fā)生致命的算術運算錯誤時發(fā)出. 不僅包括浮點運算錯誤, 還包括溢出及除數為0等其它所有的算術的錯誤著榴。SIGKILL
用來立即結束程序的運行. 本信號不能被阻塞、處理和忽略SIGBUS
非法地址, 包括內存地址對齊(alignment)出錯SIGSEGV
試圖訪問未分配給自己的內存, 或試圖往沒有寫權限的內存地址寫數據屁倔。SIGSYS
非法的系統(tǒng)調用脑又。SIGPIPE
管道破裂。這個信號通常在進程間通信產生锐借,比如采用FIFO(管道)通信的兩個進程问麸,讀管道沒打開或者意外終止就往管道寫,寫進程會收到SIGPIPE信號钞翔。此外用Socket通信的兩個進程严卖,寫進程在寫Socket的時候,讀進程已經終止布轿。SIGALRM
時鐘定時信號, 計算的是實際的時間或時鐘時間哮笆。 alarm函數使用該信號。SIGTERM
程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理汰扭。通常用來要求程序自己正常退出稠肘,shell命令kill缺省產生這個信號。如果進程終止不了东且,我們才會嘗試SIGKILL启具。SIGURG
有”緊急”數據或out-of-band數據到達socket時產生。SIGSTOP
停止(stopped)進程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別:該進程還未結束, 只是暫停執(zhí)行珊泳。 本信號不能被阻塞, 處理或忽略鲁冯。SIGTSTP
停止進程的運行, 但該信號可以被處理和忽略拷沸。SIGCONT
讓一個停止(stopped)的進程繼續(xù)執(zhí)行。 本信號不能被阻塞薯演。SIGCHLD
子進程結束時, 父進程會收到這個信號撞芍。SIGTTIN
當后臺作業(yè)要從用戶終端讀數據時, 該作業(yè)中的所有進程會收到SIGTTIN信號。SIGTTOU
類似于SIGTTIN, 但在寫終端(或修改終端模式)時收到跨扮。SIGIO
文件描述符準備就緒, 可以開始進行輸入/輸出操作序无。SIGXCPU
超過CPU時間資源限制。這個限制可以由getrlimit/setrlimit來讀取/改變衡创。SIGXFSZ
當進程企圖擴大文件以至于超過文件大小資源限制帝嗡。SIGVTALRM
虛擬時鐘信號. 類似于SIGALRM, 但是計算的是該進程占用的CPU時間。SIGPROF
類似于SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統(tǒng)調用的時間璃氢。SIGWINCH
窗口大小改變時發(fā)出哟玷。SIGINFO
收到終端發(fā)出的狀態(tài)請求時發(fā)出。SIGUSR1
留給用戶使用SIGUSR2
留給用戶使用
Exception Codes
-
0xbaaaaaad
用戶按住Home鍵和?音量鍵,獲取當前內存狀態(tài),不代表崩潰一也。
0xbad22222
VoIP應?用因為恢復得太頻繁導致crash巢寡。0x8badf00d
在啟動、終?止應?用或響應系統(tǒng)事件花費過?長時間,意為“ate bad food”椰苟。0xc00010ff
因為太燙了被干掉,意為“cool off”抑月。0xdead10cc
因為在后臺時仍然占據系統(tǒng)資源(?比如通訊錄)被干掉,意為“dead lock”。0x2bad45ec
應用程序違反安全規(guī)則被強制退出舆蝴。0xdeadfa11
用戶強制退出,意為“dead fall”谦絮。(系統(tǒng)無響應時,用戶按電源開關和HOME鍵)