iOS,应用崩溃日志分析

时间:2022-05-22 19:41:01

参考资料:http://www.cocoachina.com/industry/20130725/6677.html

1.获得崩溃日志

2.崩溃日志实例

3.符号化崩溃日志

4.低内存闪退

获得崩溃日志

  1.1Xcode上选择Windows/Devices;选中设备,点击Views Device Logs可以看到设备Crash日志iOS,应用崩溃日志分析

1.2应用提交到App Store后,你也能从 iTunes Connect 获取到用户的崩溃日志. 登录到 iTunes Connect 上, 选择 Manage Your Applications, 点击相应的应用, 点击应用图标下面的 View Details 按钮, 然后点击右栏Links部分的  Crash Reports 。

iOS,应用崩溃日志分析

崩溃日志实例

iOS,应用崩溃日志分析

2.1进程信息

Incident Identifier是崩溃报告的唯一标识符。

CrashReporter Key是与设备标识相对应的唯一键值。虽然它不是真正的设备标识符,但也是一个非常有用的情报:如果你看到100个崩溃日志的CrashReporter Key值都是相同的,或者只有少数几个不同的CrashReport值,说明这不是一个普遍的问题,只发生在一个或少数几个设备上。

Hardware Model是标识设备类型。 如果很多崩溃日志都是来自相同的设备类型,说明应用只在某特定类型的设备上有问题。上面的日志里,崩溃日志产生的设备是iPhone 4s。

Process是应用名称。中括号里面的数字是闪退时应用的进程ID。

2.2基本信息

  这部分给出了一些基本信息,包括闪退发生的日期和时间,设备的iOS版本。如果有很多崩溃日志都来自iOS 6.0,说明问题只发生在iOS 6.0上。

2.3异常

  在这部分,你可以看到闪退发生时抛出的异常类型。还能看到异常编码和抛出异常的线程。根据崩溃报告类型的不同,在这部分你还能看到一些另外的信息。

2.4线程回溯

  这部分提供应用中所有线程的回溯日志。 回溯是闪退发生时所有活动帧清单。它包含闪退发生时调用函数的清单。

看下面这行日志:

iOS,应用崩溃日志分析

它包括四列:
帧编号—— 此处是2。
二进制库的名称 ——此处是 XYZLib.
调用方法的地址 ——此处是 0x34648e88.
第四列分为两个子列,一个基本地址和一个偏移量。此处是0×83000 + 8740, 第一个数字指向文件,第二个数字指向文件中的代码行。
 
2.5线程状态
  这部分是闪退时寄存器中的值。一般不需要这部分的信息,因为回溯部分的信息已经足够让你找出问题所在。
 
2.6二进制映像
  这部分列出了闪退时已经加载的二进制文件。
2.7异常编码
  0x8badf00d: 读做 “ate bad food”! (把数字换成字母,是不是很像 :p)该编码表示应用是因为发生watchdog超时而被iOS终止的。  通常是应用花费太多时间而无法启动、终止或响应用系统事件。
  0xbad22222: 该编码表示 VoIP 应用因为过于频繁重启而被终止。
  0xdead10cc: 读做 “dead lock”!该代码表明应用因为在后台运行时占用系统资源,如通讯录数据库不释放而被终止 。
  0xdeadfa11: 读做 “dead fall”! 该代码表示应用是被用户强制退出的。根据苹果文档, 强制退出发生在用户长按开关按钮直到出现 “滑动来关机”, 然后长按 Home按钮。强制退出将产生 包含0xdeadfa11 异常编码的崩溃日志, 因为大多数是强制退出是因为应用阻塞了界面。
 (注意: 在后台任务列表中关闭已挂起的应用不会产生崩溃日志。 一旦应用被挂起,它何时被终止都是合理的。所以不会产生崩溃日志。)

符号化崩溃日志

3.1使用Xcode查看

  打开Xcode菜单上的Window——Devices,找到设备的device logs项中的crash log,稍等片刻,你就会发现这里的crash log已经被自动解析过了(大部分情况会自动解析,如果不行请右键点击选择Re-Sysbomlicate)。

3.2命令行工具symbolicatecrash

  准备下面3个文件

  crash报告(.crash文件)

  dSYM 符号集(.dSYM文件):Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/<用户名>/Library/Developer/Xcode/Archives 目录下,在Finder按Shift+command+G;找到对应xcarchive文件,右键显示包内容拿出dSYM文件

iOS,应用崩溃日志分析

  symbolicatecrash(日志符号化工具):在终端中执行 find /Applications/Xcode.app -name symbolicatecrash -type f

根据执行结果请打开Finder-----> 应用程序 -------> Xcode -------> 右键 显示包内容,在 下面 这个路径下面就可以看到symbolicatecrash工具了

    Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

iOS,应用崩溃日志分析

之后把3个文件拷贝到一个文件夹中

iOS,应用崩溃日志分析

  打开终端先执行export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer;然后执行

/Users/Vie/Desktop/CarshLog/symbolicatecrash /Users/Vie/Desktop/CarshLog/Crasher.crash /Users/Vie/Desktop/CarshLog/Crasher.app.dSYM >/Users/Vie/Desktop/CarshLog/Crasher.log;(/Users/Vie/Desktop/CarshLog/为文件路径,可以将文件直接拖到终端)得到符号化后的日志文件

iOS,应用崩溃日志分析

获得的日志可以看到崩溃信息

iOS,应用崩溃日志分析

低内存闪退

  低内存崩溃日志与普通崩溃略有不同;被iOS因释放内存页终止的进程名称后面你会看到jettisoned 字样。如果看到它出现在你的应用名称后面,说明你的应用因使用太多内存而被终止了。

iOS,应用崩溃日志分析