(转载)iOS系统Crash文件分析方法
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/
Xcode 4.3之前
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
一. 问题的产生
在xcode的Window->Orgnizer->Device Logs里面可以看到连着的iphone(ipad)设备上面程序crash的记录,但设备上的一个crash记录只能同步一次,
一旦在某台Mac上查看了Device Logs,设备上的crash文件就都会放到这台Mac上。
从Device Logs里面看crash文件,会发现有时候崩溃的信息里面有代码的函数名,有时候却只有函数地址(如下),这个是怎么回事呢?
Thread 0 Crashed:
0 libobjc.A.dylib 0x300c87ec 0x300bb000 + 55276
1 MobileLines 0x00006434 0x1000 + 21556
2 MobileLines 0x000064c2 0x1000 + 21698
3 UIKit 0x30a740ac 0x30a54000 + 131244
4 UIKit 0x30a66110 0x30a54000 + 74000
5 UIKit 0x30a6565c 0x30a54000 + 71260
6 GraphicsServices 0x3169b0b4 0x31696000 + 20660
7 GraphicsServices 0x3169d818 0x31696000 + 30744
8 IOMobileFramebuffer 0x31f3e8f8 0x31f3d000 + 6392
9 com.apple.framework.IOKit 0x30f342b8 0x30f30000 + 17080
10 CoreFoundation 0x3025ced4 0x30229000 + 212692
11 CoreFoundation 0x3025bed6 0x30229000 + 208598
12 CoreFoundation 0x3025b584 0x30229000 + 206212
13 GraphicsServices 0x316998e4 0x31696000 + 14564
14 UIKit 0x30a5e308 0x30a54000 + 41736
15 UIKit 0x30a671dc 0x30a54000 + 78300
16 MobileLines 0x00002090 0x1000 + 4240
17 MobileLines 0x0000202c 0x1000 + 4140
二. 问题的原因
其实这里关系到编译后的两个文件:MyApp.app以及MyApp.app.dSYM,如果崩溃的程序正好是这台Mac编译出来的话,并且对应的同时
编译出来的app和dSYM文件还在build目录下的话(即还没编译过其他更新的版本),Orgnizer会把crash文件的函数名解析出来,如果没了的话,就是
光秃秃的地址了,这个时候即使拿同样的代码再次编译,也不能解析出代码信息来了,所以发布的版本一定要保留.app和.dSYM文件。
三. 解决的方法
如果出现了只有地址的情况,只要.app和.dSYM文件还在的话,symbolicatecrash工具就可以把对应的函数名解析出来。 具体使用symbolicatecrash工具
和.app及.dSYM文件,解析函数名的方法如下:
1. 新建一个专门的目录进行解析处理,如: /crash
2. 把symbolicatecrash工具从原来的位置拷贝到/crash。因为在framework里面finder不能直接进去,可以用命令行工具进行拷贝,命令如下:
$ cp /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash /crash
3. 把对应的.app和.dSYM文件拷贝到/crash,再把需要解析的crash文件也拷贝到/crash
4. 假设crash文件是MyApp_2011-xxx-iPad.crash, .dSYM文件是MyApp.app.dSYM,然后把MyApp.app也和MyApp.app.dSYM文件放在一起,再使用如下命令进行解析:
$ ./symbolicatecrash MyApp_2011-xxx-iPad.crash MyApp.app.dSYM > MyApp_symbol.crash
如果解析成功了,那么就会有函数名了(如下),如果解析不成功那么就是提供的.app和.dSYM文件与报出crashreport的版本不一致的缘故。
Thread 0 Crashed:
0 libobjc.A.dylib 0x300c87ec objc_msgSend + 20
1 MobileLines 0x00006434 -[BoardView setSelectedPiece:] (BoardView.m:321)
2 MobileLines 0x000064c2 -[BoardView touchesBegan:withEvent:] (BoardView.m:349)
3 UIKit 0x30a740ac -[UIWindow sendEvent:] + 264
4 UIKit 0x30a66110 -[UIApplication sendEvent:] + 248
5 UIKit 0x30a6565c _UIApplicationHandleEvent + 4088
6 GraphicsServices 0x3169b0b4 PurpleEventCallback + 428
7 GraphicsServices 0x3169d818 HeartbeatVBLCallback + 152
8 IOMobileFramebuffer 0x31f3e8f8 IOMobileFramebufferNotifyFunc + 124
9 com.apple.framework.IOKit 0x30f342b8 IODispatchCalloutFromCFMessage + 304
10 CoreFoundation 0x3025ced4 __CFMachPortPerform + 72
11 CoreFoundation 0x3025bed6 CFRunLoopRunSpecific + 2364
12 CoreFoundation 0x3025b584 CFRunLoopRunInMode + 44
13 GraphicsServices 0x316998e4 GSEventRunModal + 268
14 UIKit 0x30a5e308 -[UIApplication _run] + 404
15 UIKit 0x30a671dc UIApplicationMain + 1064
16 MobileLines 0x00002090 main (main.m:16)
17 MobileLines 0x0000202c start + 44
首先查看crash log中的崩溃线程,假如是这样的:
Thread 0 Crashed:
0 libobjc.A.dylib 0x00003ec0 objc_msgSend + 24
1 MyApp 0x000036d2 0×1000 + 9938
我们得到了用户发生崩溃情况的内存地址:0x000036d2
然后回到我们应用程序的build目录,目录下一定要包含MyApp.app 和MyApp.app.dSYM两个文件。
在控制台使用dwarfdump命令,解析出内存地址,如:
dwarfdump –lookup 0x000036d2 –arch armv6 MyApp.app.dSYM
输出信息如下:

(转载)iOS系统Crash文件分析方法的更多相关文章
- iOS 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
时间2013-08-20 12:49:20 GoWhich原文 http://www.gowhich.com/blog/view/id/343 苹果官方 Crash文件分析方法 (iOS系统Cras ...
- 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
对于提交的苹果官方的app,在审核的时候会给我们一些crash文件,对于这些有用的文件,里面是关于我们的bug的一些信息,那么该如何去调试呢 第一步:在任意目录创建一个目录,用来调试crash,我这里 ...
- ios系统crash文件分析
分析crash文件必备条件:crash文件的uuid,app的uuid,dsym文件的uuid必须一致 1> crash文件的uuid为Binary Images:0x4000 - 0x1173 ...
- iOS通过dSYM文件分析crash
重点是dwarfdump --uuid命令 我们在iOS开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应 ...
- iOS .Crash文件分析处理办法 (利用symbolicatecrash工具处理)
崩溃分析方式:命令行解析Crash文件 通过Mac自带的命令行工具解析Crash文件需要具备三个文件 symbolicatecrash,Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所 ...
- [转][iOS Crash文件分析]-如何使用symbolicatecrash工具
上传一软件,被拒了,自己测试了n遍都未出现这个情况,今天用symbolicatecrash工具分析了一下苹果提供的Crash文件,最终查到是 - (void)mapView:(MKMapView *) ...
- iOS App Crash原理分析
预备知识:OS X系统分析 1.内核XNU是Darwin的核心,也是整个OS X的核心.XNU本身由以下几个组件构成: Mach微核心 BSD层 libKern I/O Kit 此外,内核是模块化的, ...
- [转载]mysql慢日志文件分析处理
原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...
- 蓝屏 Dump文件分析方法
WinDbg使用有点麻烦,还要符号表什么的.试了下,感觉显示很乱,分析的也不够全面... 试试其他的吧!今天电脑蓝屏了,就使用其dump文件测试,如下: 1.首先,最详细的,要属Osr Online这 ...
随机推荐
- Opencv读取视频
CvCapture 是一个结构体,用来保存图像捕获所需要的信息. opencv提供两种方式从外部捕获图像 一种是从摄像头中, 一种是通过解码视频得到图像. 两种方式都必须从第一帧开始一帧一帧的按顺序获 ...
- c语言二叉树基本操作
编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...
- 关于URL编码
关于URL编码 作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符 ...
- Squid
事件:由于我们在运维过程中需要升级或安装新的开源软件或组件时,相关的依赖包或基础包非常非常多. 因安全限制,对于没有访问internet权限的服务器,在执行安装或升级过程中就非常容易出错. 所以我们需 ...
- 二、Spring——AoP
AOP概述 AOP是OOP的有益补充,他为程序开发提供了一个崭新的思考角度,可以将重复性的横切逻辑抽取到统一的模块中,通过OOP的纵向抽象和AOP的横向抽取,程序才能真正解决复杂性代码问题. Spri ...
- 【AT91SAM3S】英倍特串口示例工程05-UART中,串口是怎样初始化的
在这个示例工程的main.c文件中,进入main之后,没有发现串口功能的任何配置.直接使用了printf这个东西进行输出.将软件下载到开发板上之后,在电脑端使用串口软件,可以看板子有数据发来.说明这个 ...
- 对ASP.NET运行机制之 一般处理程序ashx的学习
一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名.其中一个httpHandler接受并处理一个http请求,类比于Java中的servlet.类比于在Java中 ...
- java Util
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.qihangedu.tms.a ...
- 关于Unity中Camera的Aspect
一直以来对Camera的Aspect和Game窗口的Aspect都是一知半解,某天从一本书中看到了对Camera的API讲解,但是总觉得对Aspect讲解的有问题.于是就认真的思考起了这个问题,还发现 ...
- 10G R2 参数文件相关
CLUSTER_DATABASE Property Description Parameter type Boolean Default value false Modifiable No Range ...