1.前言  

想来每个iOS攻城狮,都免不了要接触.crash文件
那么什么是.crash文件?
iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩溃过的机器,然后从崩溃过的机器上导出.crash文件
 

2.如何解析.crash文件  

我们先看一眼导出来的.crash文件,重点看下崩溃部分的记录
如下图
显然从这图里,我们没法定位出具体的错误,和崩溃的具体行数。
我们得到是个二进制的报告,这时候我们需要对它进行反编译。
对.crash文件进行反编译我们需要用到三个文件,缺一不可
 

2.1.找到发布app时的.ipa文件(就是你打包app上传到商店里的那个文件)  

2.2.找到Archive时生成的.dSYM文件  

Show in Finder后对文件夹中的这个.xcarchive文件右键,显示包内容,就可以看到一个名为dSYMs的文件夹,把里面的.dSYM文件拷出来
 

2.3.将.ipa、.crash、.dSYMs 文件放在同一个文件夹(例如:创建一个bugcrash文件夹)  

2.4.打开你的xcode,然后打开你发布时的代码(记住必须保证是你发布时的代码,如果不是的话,可能会出现指向的崩溃行数有误,或者无法解析出来的问题)  

 

3.利用xcode自带re-symbolicate解析崩溃报告  

 
点击Devices进去
 
 
然后点击View Device Logs 进去
 
 
 
 
现在打开bugcrash文件夹,然后把.crash文件拖入右框中然后选中右键re-symbolicate log进行解析
大约1-10秒中之后,我们就能发现之前的二进制数变成了我们想要看到的具体行数和具体的.crash原因.
 
 

4.如果xocde自带的Re-symbolicate仍无法解析,那么我们需要利用symbolicatecrash借助命令行手动解析  

symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode6.1.app请换成你的Xcode名称)
/Applications/Xcode6.1.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
把这个路径拷贝一下,然后粘到Finder的“前往文件夹”下,前往,就可以看到symbolicatecrash工具了,现在把它也拷到桌面的crash文件夹里。至此,crash文件夹里现在有4个文件了,分别是.app, .crash, .dSYM, symbolicatecrash。接下来就是用终端敲命令,生成更易分析的crash。
./symbolicatecrash /Users/xxxx/Desktop/bugcrash/InOrder.crash /Users/xxxx/Desktop/bugcrash/InOrder.app.dSYM > Control_symbol.crash
上述命令中,"xxxx"和"InOrder"请自行替换成对应的名称。运行,这时候终端可能会报错Error: "DEVELOPER_DIR" is not defined at /usr/local/bin/symbolicatecrash line 53. 这时候在终端中再输入如下(Xcode6.1.app依然是要替换成实际名称)
然后再跑一下刚刚的那个命令,这时候看一下桌面的crash文件夹下就会多出一个名为“Control_symbol.crash”的文件,我们打开看一下。和刚刚一样。
 
如果还有什么不明白欢迎在下面留言,有时间的我回一一回复,谢谢大家。
 
 
作者: 清澈Saup
出处:http://www.cnblogs.com/qingche/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

iOS- 全方位解析.crash文件崩溃报告的更多相关文章

  1. iOS如何解析crash文件中的地址

    1.目录中存放app文件 2.打开文件 3.执行命令otool -arch arm64 -l ./QQStock  | grep -B 1 -A 10 "LC_SEGM" | gr ...

  2. 命令行解析Crash文件

    做了快两年的开发了,没有写过博客,最近公司app上架,程序崩溃被拒绝了,可是给的crash文件,又看不出哪里的问题,网上各种搜,终于找到了解决的办法,想想还是写个博客吧,希望给哪些也遇到这类问题的朋友 ...

  3. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  4. Xcode自带工具symbolicatecrash解析Crash文件

    项目中遇到一台手机运行测试包闪退的现象,而且是一个设备闪退其他设备没有再现的情况 可以看到Crash信息,但是指定的问题给出的是16进制内存地址,根本无法定位问题发生在哪个类的哪个函数中 所以需要解析 ...

  5. symbolicatecrash解析crash文件

    导出crash文件 Xcode -> Window -> Devices and Simulators -> View Device Logs ,然后选中导出. 找到.app文件和. ...

  6. iOS 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)

    时间2013-08-20 12:49:20 GoWhich原文  http://www.gowhich.com/blog/view/id/343 苹果官方 Crash文件分析方法 (iOS系统Cras ...

  7. iOS 几种常用的 crash log 崩溃信息调试方法

    前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...

  8. iOS .Crash文件分析处理办法 (利用symbolicatecrash工具处理)

    崩溃分析方式:命令行解析Crash文件 通过Mac自带的命令行工具解析Crash文件需要具备三个文件 symbolicatecrash,Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所 ...

  9. macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号

    一.使用流程 Windows下的程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃的具体位置,甚至可以对应到源代码的具体行数.macOS下的symbolicatecrash也具备相应的功能.对应 ...

随机推荐

  1. linux环境mysql的安装主从关系的配置

  2. springboot 使用@ConfigurationProperties注入配置属性

    导入依赖,让springboot支持@ConfigurationProperties 注解 <!-- 支持 @ConfigurationProperties 注解 --> <depe ...

  3. linux内存碎片的概念

    一般在内核术语中的“碎片”都是基于物理内存而言的,我没有太看懂你得出碎片是针对地址空间这个结论的逻辑.但我认为,既然你知道了malloc是用户空间调用的,那么你所谓的碎片也是从用户空间的视角而言的,但 ...

  4. PHP学习笔记之interface关键字

    interface用于定义接口 接口里边的方法不需要有方法的实现 implements用于表示类实现某个接口 实现了某个接口之后,必须提供接口中定义的方法的具体实现. 可以用instanceof关键字 ...

  5. tomcat如何禁止显示目录和文件列表

    打开   tomcat的安装目录/conf/web.xml   文件 找到: <servlet> <servlet-name>default</servlet-name& ...

  6. day5 二值化

    1.otsu二值化 # coding=utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt #1.读入图像 ...

  7. Elasticsearch6.2集群搭建

    Elasticsearch6.2集群搭建 2018年04月02日 11:07:45 这个名字想了很久 阅读数:14154    版权声明:本博客为学习.笔记之用,以笔记形式记录学习的知识与感悟.学习过 ...

  8. 使用iChecker的注意事项

    1. 要先引用jquery 2. ichecker分好多主题,每个主题带好几种颜色,在配置的时候最好指定一下. 比如引入了square主题的blue颜色演示,配置项中checkboxClass就写ic ...

  9. Maven学习(六)-----Maven仓库的详细介绍

    Maven仓库的详细介绍 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依 ...

  10. The specified value "2019-1-2" does not conform to the required format, "yyyy-MM-dd"

    问题: 在cshtml中转换的日期格式错误,前端报错:The specified value "2019-1-2" does not conform to the required ...