iOS 手动解析崩溃日志

原创 2018年04月16日 15:58:03

最近偶然与到一个线上crash问题,一直无法复现,十分苦恼,大家都知道,如果在开发阶段,完全可以设置全局断点等等方式进行crash定位,但是线上的问题怎么解决呢?

经过研究学习后发现,我们可以通过线上crash日志来进行线上bug的定位。恰巧我们的APP内部集成了talkingdtata,然后就总结一下线上崩溃日志的解析办法。

从talkingdata的崩溃信息列表可以查看崩溃日志,其中形式大约如此:

reason: *** -[__NSCFConstantString substringToIndex:]: Index 1 out of bounds; string length 0
callStackSymbols: (
	0   CoreFoundation                      0x0000000188b86ff8 <redacted> + 148
	1   libobjc.A.dylib                     0x00000001875e8538 objc_exception_throw + 56
	2   CoreFoundation                      0x0000000188b86f28 <redacted> + 0
	3   Foundation                          0x000000018958c928 <redacted> + 128
	4   AppName                           0x0000000100167800 AppName+ 1144832
	5   AppName                           0x000000010014b930 AppName + 1030448
	6   AppName                           0x00000001000d9408 AppName + 562184
	14  UIKit                               0x000000018f289d38 <redacted> + 64
	15  UIKit                               0x000000018f28d56c <redacted> + 124
	16  UIKit                               0x000000018ee47470 <redacted> + 252
	17  UIKit                               0x000000018ece9380 <redacted> + 720
	26  CoreFoundation                      0x0000000188b3542c <redacted> + 24
	27  CoreFoundation                      0x0000000188b34d9c <redacted> + 540
	28  CoreFoundation                      0x0000000188b329a8 <redacted> + 744
	29  CoreFoundation                      0x0000000188a62da4 CFRunLoopRunSpecific + 424
	30  GraphicsServices                    0x000000018a4cc074 GSEventRunModal + 100
	31  UIKit                               0x000000018ed1d058 UIApplicationMain + 208
	32  AppName                           0x00000001001a0aec AppName + 1379052
	33  libdyld.dylib                       0x0000000187a7159c <redacted> + 4
)

Process name: AppName  //App包名
dSYM UUID: CF68106F-F777-3C-8593AB-414C1904A4BA
Architecture: arm64
Start Address: 0x100050000  //起始地址
Slide Address: 0x50000  //偏移地址

因为太长,所以删除了几行没有用的信息 从上述中可以得到很多的信息 包含了崩溃栈信息 App包名 偏移地址 起始地址。

除了这些,平台还展示了崩溃的App版本等信息(可以用于确认版本),如图:


接下来第一步 做准备工作

首先 从talkingdata 下载崩溃信息文件 一般下载之后为CSV格式(也可以直接对照talkingdata线上信息进行处理)。

然后 获取符号表文件:

一次点击 X-code->Window->Organizer->Archives 选中talkingdata 所提示的版本 右键点击 "Show in Finder" 找到 xcarchive 文件。选中 xcarchive 文件 右键点击 "Show Package Contents" 进入 dYSMs 可以看到 dYSM文件。这就是我们需要的!

在电脑桌面 手动创建一个 crash文件夹 然后把 dYSM 文件拷贝到该文件夹之下。

打开 Terminal 命令行操作 cd进入 crash文件夹目录下。

输入:

atos -o AppName.app.dSYM/Contents/Resources/DWARF/AppName -arch arm64 -l 0x100050000 0x0000000100167800
其中 0x100050000:起始地址  0x0000000100167800:崩溃地址

其中崩溃地址一般为 崩溃信息中首行与你的App包名相关的地址 就是该例子中首行与 AppName 相关的地址信息(也就是崩溃信息中标记为4的行)。

最终的打印结果会出现:

…(MapViewController.m:148)

就是说crash的位置在 MapViewController.m文件中的 第148行。

该方法适用于大部分的第三方信息收集SDK,当然有的SDK更智能,直接在错误统计中已经替你查找好了crash位置,只要你每次打包上线的时候把 dYSM 文件上传到他们的服务器。



[iOS Crashr日志分析一] Crash日志分析 工具准备

//crash 报告解释 http://www.cnblogs.com/smileEvday/p/Crash1.htmlhttp://blog.csdn.net/ys410900345/articl...
  • iOSTianNan
  • iOSTianNan
  • 2016-08-29 15:36:42
  • 1321

解析iOS崩溃日志

iOS APP崩溃后,会生成一个崩溃日志xxx.crash。但是crash日志里都是一些地址信息,可读性很低。...
  • chanryma
  • chanryma
  • 2016-04-07 10:36:46
  • 703

使用dSYM 文件分析iOS崩溃日志

来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户...
  • jinglijun
  • jinglijun
  • 2014-10-27 19:18:43
  • 2407

iOS崩溃日志解析

  • 2015年04月09日 18:11
  • 18KB
  • 下载

iOS 崩溃日志分析(个人总结,最实用)

要分析奔溃日志需要三个文件:crash日志,symbolicatecrash分析工具,.dSYM符号集 0. 在桌面创建一个crash文件夹 1. 需要Xcode自带的崩溃分析工具symboli...
  • my_programe_life
  • my_programe_life
  • 2016-02-18 15:01:08
  • 7127

Xcode7.3下如何分析线上(已通过AppStore审核)IOS应用的崩溃日志

这得从提交审核说起,把代码打包成.ipa需要执行Xcode的Archive操作. Archive完成后会打开Xcode的Organizar页面。记住这个创建时间和版本号(12月7日上午10:31,Ve...
  • qq_15509071
  • qq_15509071
  • 2016-12-07 09:56:02
  • 883

iOS 崩溃日志收集及分析

最近几天,项目中在增加推送功能,选用的极光推送SDK,相信大家也都用过,官方文档的集成步骤很详细,集成也很容易。但是这跟今天的主题有什么关系呢??? 黑人问号???别急,下面就来说说我今天的遭遇。坑~...
  • hmh007
  • hmh007
  • 2017-01-11 23:35:26
  • 4472

解析IOS崩溃日志(crash Log)

http://lieyunye.github.io/blog/2013/09/10/how-to-analyse-ios-crash-log/ http://blog.csdn.net/smking/...
  • xyxjn
  • xyxjn
  • 2015-01-30 18:25:12
  • 36155

iOS开发:利用友盟umcrashtool定位崩溃日志

1.下载umcrashtool工具2.从友盟下载 .csv崩溃日志3.将工具和日志放在同一目录下;4.命令行输入1)cd 步骤3中工具和文件的上层目录, 回车。例:cd /Users/xxx/Desk...
  • Nine_Yao
  • Nine_Yao
  • 2016-11-30 18:04:50
  • 1842

ios 崩溃日志 符号化

1.准备测试代码 在applicationDidFinishLaunching() 方法里 调用 setPosffffff(nullptr);  这样必定会出现崩溃,因为 node为空 去调用setP...
  • lovehappy108
  • lovehappy108
  • 2016-05-12 13:27:39
  • 1296
收藏助手
不良信息举报
您举报文章:iOS 手动解析崩溃日志
举报原因:
原因补充:

(最多只允许输入30个字)