记录还原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了。
第三步、找到应用程序文件
- (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过程的主要内容,如果未能解决你的问题,请参考以下文章
一个未完成的2.6.32-220内核踩内存crash分析记录
还原堆栈信息,分析地形系统使用ASTC格式的纹理导致Crash的问题