转自: http://ios-iphone.diandian.com/post/2012-05-18/19440182
Xcode 4.3的symbolicatecrash的位置和老版本的不一致了。

/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文件分析方法的更多相关文章

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

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

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

    对于提交的苹果官方的app,在审核的时候会给我们一些crash文件,对于这些有用的文件,里面是关于我们的bug的一些信息,那么该如何去调试呢 第一步:在任意目录创建一个目录,用来调试crash,我这里 ...

  3. ios系统crash文件分析

    分析crash文件必备条件:crash文件的uuid,app的uuid,dsym文件的uuid必须一致 1> crash文件的uuid为Binary Images:0x4000 - 0x1173 ...

  4. iOS通过dSYM文件分析crash

    重点是dwarfdump --uuid命令 我们在iOS开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应 ...

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

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

  6. [转][iOS Crash文件分析]-如何使用symbolicatecrash工具

    上传一软件,被拒了,自己测试了n遍都未出现这个情况,今天用symbolicatecrash工具分析了一下苹果提供的Crash文件,最终查到是 - (void)mapView:(MKMapView *) ...

  7. iOS App Crash原理分析

    预备知识:OS X系统分析 1.内核XNU是Darwin的核心,也是整个OS X的核心.XNU本身由以下几个组件构成: Mach微核心 BSD层 libKern I/O Kit 此外,内核是模块化的, ...

  8. [转载]mysql慢日志文件分析处理

    原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...

  9. 蓝屏 Dump文件分析方法

    WinDbg使用有点麻烦,还要符号表什么的.试了下,感觉显示很乱,分析的也不够全面... 试试其他的吧!今天电脑蓝屏了,就使用其dump文件测试,如下: 1.首先,最详细的,要属Osr Online这 ...

随机推荐

  1. centos-系统语言检查设置安装

    查看当前系统语言 登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言. 查看安装的语言包 查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表 ...

  2. Android性能之启动时间篇

    背景介绍 Android用户也许会经常碰到以下的问题: 1)应用后台开着,手机很快没电了--应用耗电大: 2)首次/非首次启动应用,进入应用特别慢--应用启动慢: 3)应用使用过程中,越来越卡--CP ...

  3. Type Project has no default.properties file! Edit the project properties to set one.

    Description Resource Path Location Type Project has no default.properties file! Edit the project pro ...

  4. PHP DES 加解密

    代码很简单,如下: <?php $key = 'very important data'; function jiami($key, $str) { /* Open module, and cr ...

  5. 【mysql元数据库】使用information_schema.tables查询数据库和数据表信息

    概述 对于mysql和Infobright等数据库,information_schema数据库中的表都是只读的,不能进行更新.删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没 ...

  6. 建立一个简单的SpringMVC程序

    首先,所建立的程序是一个web程序,所以在web.xml文件中进行如下的配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  7. log4net:保存日志到数据库

    1:下载log4net http://logging.apache.org/log4net/download_log4net.cgi 2:引用到项目 下载以后,在项目中引用log4net.dll 3: ...

  8. 使用C#访问SQLLite

    1.SQLLite如何集成在C#中 2.相关C#与SQLLite资源,及说明 3.简单示例

  9. IOS框架研究之SDWebImage的原理以及使用流程

    SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. SDWebImage 支持异步的图片下载+ ...

  10. Bugtags 介绍视频 - App 测试 · 从未如此简单

    Bugtags 是什么? Bugtags 是移动时代首选 Bug 管理系统,针对不同的使用场景,Bugtags 具有以下强大特性: 移动应用 Bug 管理 Bugtags 可以直接在应用中所见即所得提 ...