转自: 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. 第七课第一节,T语言流程语句( 版本5.0)

    流程语句 if语句 用if语句可以构成分支结构.它根据给定的条件进行判断,以决定执行某个分支程序段.TC综合开发工具的if语句有三种基本形式,并且每个语句的结尾都要有一个end (注:关键字,if,e ...

  2. UML学习笔记

    目前转岗到业务开发,业务逻辑用到了大量的类库.UML则是理解.指导其代码实现的利器. 有6种重要的关系,按照关系的强弱排序如下: 实现 = 泛化 > 组合(关联) >聚合 > 依赖 ...

  3. AndroidStudio 中的坑Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRID

    将 build.gradle 中 的 classpath改为2.0.+ dependencies { classpath 'com.android.tools.build:gradle:2.0.+'然 ...

  4. OJ上 G++ 与 C++ 的区别

    1.输出double类型时,如果采用G++提交,scanf采用%lf,prinf采用%f,否则会报错 2.使用GCC/G++的提醒: 对于64位整数, long long int 和 __int64 ...

  5. [原创]cocos2d-x研习录-第二阶 概念类之精灵类(CCSprite)

    上一节说布景层CCLayer是小容器,那么精灵类CCSprite就是容器添加的内容,它是构成游戏的主要元素.精灵这个名称应该是游戏专用,它表示游戏中玩家操作的主角.敌人.NPC(Non Player ...

  6. Boot loader: Grub进阶[转]

    Boot loader: Grub进阶 本文记录grub的一些进阶配置 关於核心功能当中的 vga 配置 事实上,你的 tty1~tty6 除了 80x24 的解析度外,还能够有其他解析度的支持喔!但 ...

  7. Ubuntu14.04搭建Caffe(仅CPU)

    一直以来都没有写博客的习惯,后来发现以前做的工作如果不注意及时整理和记录往往丢失的很快.对我而言这是一篇具有重要意义的文章,好的习惯要持之以恒,以后的日子我会常驻博客园!由于本人水平有限,智商略低,欢 ...

  8. The error occurred while setting parameters--索引 3 超出范围 sqlserver2008

    这个问题不是jar包冲突,是表的问题,表里的ID设置成自动增加1,就可以了!

  9. SpringMVC学习系列(2) 之 经典的HelloWorld实现

    前一篇简单介绍了Spring MVC的一些知识,下面就要开始学习如何把Spring MVC运用到具体的项目中去. 首先还是从一个简单的Hello World项目说起: 我机器的开发环境为: Ubunt ...

  10. Swagger使用总结

    Swagger使用总结 1. Swagger是什么? 官方说法:Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作 ...