当我们在使用自己的APP时,遇到了crash,如何分析原因?
一般大点的公司,都有自己的crash上报系统,如果发现crash可以在上面进行查看。
但是也有一些情况下,没有crash上报,或者有的公司压根就没有crash上报系统,这种情况下如何定位crash呢?
一、导出crash堆栈
首先,在发生crash的iPhone以下路径找到对应的crash
Setting -> Privacy -> Analytics & Improvements -> Analytics Data
crash 堆栈列表
该页面记录了当前手机所有app发生的crash堆栈,这时候可以搜索出自己的APP的堆栈,一般都是自己的工程名,再看看后面的时间,基本可以确定是不是这份堆栈了。找到后可以通过右上角把文件导出。
但是这些堆栈都是以地址的形式记录的,看不出对应的代码符号,简而言之,人类看不懂,这个时候就需要进行“翻译” 。
二、符号化堆栈
准备工作:
- 刚才导出crash堆栈文件.ips
- 符号表.dSYM,在编译APP二进制文件时同级别目录下会有这份文件
- symbolicatecrash工具,在工具是Xcode自带的,可以在Xcode目录下找到
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
使用时,可以把symbolicatecrash文件复制到和其他两个文件同一个目录下
开始
./symbolicatecrash xxx.ips yyy.dSYM > result.crash
执行以上命令即可,会把结果导出到文件result.crash
然后打开result.crash,就可以看到熟悉的堆栈了
问题
有时候会遇到这个错误提示
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
这时候,只需先执行以下命令即可
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/
网友评论