Crash日志,分析专用

本文详细介绍了iOS应用的Crash日志获取、结构解析、符号化过程,以及常见的Crash类型和Exception。通过理解 Crash 报告,开发者能更好地定位和解决应用中的错误,确保应用的稳定性和用户体验。重点关注了Watchdog超时、用户强制退出、内存不足等场景下的崩溃,并提供了分析和处理内存问题的建议。同时,提到了AddressSanitizer在不同iOS版本中的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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日志的功能。比较常用的有CrashlyticsFlurry等。

 

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的调用顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值