记录还原crash log过程

Posted 阿曌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录还原crash log过程相关的知识,希望对你有一定的参考价值。

第一阶段

第一步、找到symbolicatecrash文件(可以理解为还原工具)

1.路径为/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

2.如果用1的路径找不到,可以在终端输入find /Applications/Xcode.app -name symbolicatecrash -type f或者sudo find / -name "symbolicatecrash"找到所有Xcode版本下的symbolicatecrash

第二步、找到.dSYM文件(符号表,用来还原crash log为我们看得懂的文字)

1.在工程配置的 Build Settings -> Build Options -> Debug Information Format一栏中选择配置为"DWARF with dSYM File"
2.假设在模拟器debug,在/Users/君の名/Library/Developer/Xcode/DerivedData/君のApp/Build/Products/Debug-iphonesimulator/君のApp.app.dSYM 可以找到

ps.找到这步就可以直接plan B了。

第三步、找到应用程序文件

  1. (appName.app文件,把IPA文件后缀改为zip,然后解压,Payload目录下的appName.app文件), 这里的appName是你的应用程序的名称。

第四步、找到crash报告

1.Xcode->Device->选择你的手机->根据时间点找到crash log文件->右键导出

第二阶段

首先,将symbolicatecrash拷到系统目录下:
$ sudo cp /xx/xx/xx/symbolicatecrash /usr/local/bin

(……妈蛋我这里拷失败了,一直提示没有这个目录,找不到解决方案,尝试Plan B=。=)

命令使用crash文件,应用的dSYMcrash文件中崩溃地址对应的方法符号表, 在处理之前,请依然将“.app“, “.dSYM”和 ".crash"文件放到同一个目录下(同时命令行也切换过去),然后执行以下命令:

$ export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

$ ./symbolicatecrash Test.crash Test.app.dSYM/ > crash.log

Plan B

切换目录到 Test.app.dSYM/Contents/Resources/DWARF/
目录下面还有一个Test文件
在终端输入
$ atos -o Test -l 0x1000e8000 0x100ff6770 0x10170ffdc 0x10170bec0
(命令结构为atos [-o AppName.app/AppName] [-l loadAddress] [-arch architecture] //atos命令使用指定模块(-o参数) 模块加载地址(-l参数) 函数栈地址来解析出符号)

先输紫色的,然后输入蓝色的,蓝色的可以输一个也可以输多个(空格隔开)

然后就能看到还原。(看到这一幕会落泪的,不贴图,自己去体会)

以上是关于记录还原crash log过程的主要内容,如果未能解决你的问题,请参考以下文章

求助Android crash 问题

一个未完成的2.6.32-220内核踩内存crash分析记录

还原堆栈信息,分析地形系统使用ASTC格式的纹理导致Crash的问题

Python日志—Python日志模块logging介绍

MongoDB系统CentOS 7.1 crash的排障过程

制作一个异常的 so 包,并利用 ndk-stack 分析 native 层的 Crash 日志