常见的crash原因

确定崩溃是否是Swift Runtime错误

Swift使用内存安全技术来及早发现编程错误。如果Swift运行时遇到编程错误,则运行时会捕获该错误并有意使应用程序崩溃。这些崩溃在崩溃报告中具有可识别的模式。崩溃报告中的异常信息如下所示:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
...
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
寻找语言异常的迹象

Apple的系统框架在运行时遇到某些类型的编程错误时(例如,索引超出范围的数组)会抛出语言异常。要确定崩溃是否是由于语言异常引起的,请首先确认崩溃报告包含以下模式:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY

由于语言异常而导致Last Exception Backtrace的崩溃在崩溃报告中也有:

Last Exception Backtrace:
0   CoreFoundation                    0x19aae2a48 __exceptionPreprocess + 220
1   libobjc.A.dylib                   0x19a809fa4 objc_exception_throw + 55
检查看门狗信息

系统使用看门狗来监视应用程序的响应性。如果某个应用程序无响应,则看门狗会终止该应用程序,并使用0x8badf00d“终止原因”中的代码创建一个崩溃报告:

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d

在无响应的应用程序的崩溃报告中,Termination Description包含来自看门狗的有关应用程序如何花费时间的信息。例如:

Termination Description: SPRINGBOARD, 
    scene-create watchdog transgression: application:667
    exhausted real (wall clock) time allowance of 19.97 seconds 
    | ProcessVisibility: Foreground 
    | ProcessState: Running 
    | WatchdogEvent: scene-create 
    | WatchdogVisibility: Foreground 
    | WatchdogCPUStatistics: ( 
    |  "Elapsed total CPU time (seconds): 15.290 (user 15.290, system 0.000), 28% CPU", 
    |  "Elapsed application CPU time (seconds): 0.367, 1% CPU" 
    | )

你可能感兴趣的:(常见的crash原因)