iOS Crash从iPhone导出堆栈和解析

当我们在使用自己的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/

No crash report version in mycrash.crash

https://github.com/tomieq/AppleCrashScripts?ref=iosexample.com
swift convertFromJSON.swift -i {your_json_ips_file} -o {name_for_file_where_crash_will_be_saved}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容