iOS Crash日志
Understanding Crash Reports on iPhone OS
https://developer.apple.com/videos/wwdc/2010/?id=317
http://www.cnblogs.com/smileEvday/p/Crash1.html
http://www.cocoachina.com/industry/20130725/6677.html
http://www.cnblogs.com/tiechui/p/3820044.html (http://developer.apple.com/library/ios/#technotes/tn2151/_index.html)
当一个应用程序在一台iOS 设备上崩溃时,一份“崩溃报告”将在该设备上次创建并存储起来。崩溃报告描述应用程序是在何种条件下崩溃的,大部分情况下包含一份当前正在运行线程的完整的堆栈跟踪。
产生崩溃日志的原因
- 应用违反操作系统规则,包括在启动、恢复、挂起、退出时watchdog超时、用户强制退出和低内存终止等。
- 应用中有Bug
从多任务窗口中终止一个暂停的应用程序不会产生崩溃日志。一旦一个应用被暂停,它有资格被iOS在任何时间终止,因此不会产生崩溃日志。
Crash获取途径
- 本机通过Xcode的Devices窗口获取某个设备的崩溃日志
- 设备与电脑上的iTunes Store同步后,会将崩溃日志保存在电脑上。根据电脑操作系统的不同,崩溃日志将保存在以下位置:
- Mac OS X: ~/Library/Logs/CrashReporter/MobileDevice/
- Windows XP: C:/Documents and Settings/Application Data/Apple Computer/Logs/CrashReporte/rMobileDevice/
- Windows Vista以上: C:/Users/用户名/AppData/Roaming/Apple Computer/Logs/CrashReporter/MobileDevice/
- 应用提交到App Store后,可通过itunes connect后台获取到用户上报的Crash日志。
- 有很多优秀的第三方Crash收集系统大大的方便了我们收集Crash,甚至还带了符号化Crash日志的功能。比较常用的有Crashlytics,Flurry等。
Crash文件结构
1.Process Information
Incident Identifier: 66AFBBF0-7ACB-4319-97C7-6F44E09FF9EB //崩溃报告的唯一标识符 CrashReporter Key: 97aec51145730a778c0d1cfdfc17c1b8c86ba4c5 //设备标识相对应的唯一键值(并非真正的设备的UDID,为保护隐私iOS6以后已无法获取) Hardware Model: iPad5,3 //发生Crash的设备类型 Process: XXXXClient [407] //Crash的进程名称,通常都是我们的App的名字, []里面是当时进程的ID Path: /private/var/mobile/Containers/Bundle/Application/0380D606-3A40-4633-A1B2-7E1F3E3D4FCA/XXXXClient.app/XXXXClient
//可执行程序在手机上的存储位置,注意路径时到x.app/x,x.app其实是作为一个Bundle的,真正的可执行文件其实是Bundle里面的x Identifier: com.xxxx.myapp //App的Indentifier,通常为“com.xxx.yyy” Version: 1 (1.0.0) //App的版本号,由Info.plist中CFBundleShortVersionString +
CFBundleVersion
Code Type: ARM-64 (Native) //App的CPU架构 Parent Process: launchd [1] //当前进程的父进程,由于iOS中App通常都是单进程的,一般父进程都是launchd
2.Basic Information
Date/Time: 2016-02-19 00:34:43.449 -0800 //Crash发生的时间 Launch Time: 2016-02-19 00:34:43.399 -0800 OS Version: iOS 8.4 (12H143) //系统版本,括号内的数字代表的时Bulid号 Report Version: 105 //Crash日志的格式
3.Exception
Exception Type: EXC_CRASH (SIGABRT) //异常类型
Exception Subtype: //v104 Exception Codes: 0x0000000000000000, 0x0000000000000000 //v105 Triggered by Thread: 0 //v105
Crashed Thread //v104
4.Thread Backtrace
发生Crash的线程的Crash调用栈,从上到下分别代表调用顺序,最上面的一个表示抛出异常的位置,依次往下可以看到API的调用顺序。