iOS系统Crash文件分析方法

   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

  输出信息如下:

时间: 2025-01-31 06:04:09

iOS系统Crash文件分析方法的相关文章

iOS通过dSYM文件分析crash

http://blog.csdn.net/hjy_x/article/details/20929095 重点是dwarfdump --uuid命令 我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是release环境包导致的crash,我们就需要一些特殊的手段来通过crash log进行分析定位了. 通过参考网上的一些资料,总结了一下,下面介绍一下通过dSYM文件以及crash l

一套科学系统的SEO分析方法能让你走得更远

摘要: 尽管SEO在中国已经不陌生,甚至都有形成一个行业的趋势,但是至今业内都还没有一套非常科学系统的分析方法.原因恐怕要归结于搜索引擎优化这个行业的特殊性.搜索引擎严格保守 尽管SEO在中国已经不陌生,甚至都有形成一个行业的趋势,但是至今业内都还没有一套非常科学系统的分析方法.原因恐怕要归结于搜索引擎优化这个行业的特殊性.搜索引擎严格保守他们的算法,只公布一些大家很难去知道原因的指南.所以很多SEOer都在玩一个永远也不知道具体规则的游戏,这是这个行业混乱的根源. 我多次强调<google网站

删除Win8.1系统休眠文件的方法

  Win8.1系统中,电脑的系统进入休眠的时候会把内存中的所有数据保存到一个休眠文件中.然后在C盘产生大量的垃圾文件,这些文件相当于电脑的全部内存容量,长时间的堆积下去再大的内存容量也是吃不消的.而且电脑系统的休眠功能一般的用户都是很少用到的,都是直接进行关机的所以在这种情况下小编建议大家不要使用这个功能,下面就教大家怎样设置关闭它. 方法一:以管理员权限运行CMD,打以下命令:"POWERCFG -H OFF"即自动删除该文件.大家看处理前后C盘空间的变化. 方法二:运行命令gpe

win7系统更新文件位置查找及删除系统更新文件的方法

  现在我们的电脑经常需要更新系统或者安装补丁,总是要下载一堆的系统文件,这些系统文件大,占据很大的磁盘空间,所以我们在系统更新完成之后,要及时清理这些系统文件,不然就会给我们的电脑造成负担,导致电脑运行速度缓慢.其实我们很多时候不是不想及时清除这些垃圾,而是我们不知道这些文件放在磁盘的哪个位置,所以经常会滞留一些大文件,下面小编就教大家如何找到win7查找及删除系统文件的方法. 一.Win7系统更新文件位置 Win7系统的自动更新比较复杂,因为补丁是压缩包,因此它有三个路径,一个是压缩包存储路

win10系统pdf文件输出方法

1打开任意文件,在文件菜单中选择打印 2选择 Microsoft Print to PDF 这个虚拟打印机再点击打印即可 3输出完成后的 PDF 文件双击可使用 Microsoft Edge 浏览器进行查看 这个其实就是使用了win10系统的一个虚拟打印机来实现打印出一个pdf格式的文件在电脑中了哦.

Win 7系统反选文件的方法

现在我们在删除文件时需要使用到反选功能,这样可以避免逐项手工选择的麻烦,但在Win 7下无法从右键菜单中找到这项功能.其实,Win 7当然是提供文件反选功能,只不过被隐藏而已. 操作步骤: 选择需要保留的某个文件,按下Alt键,从编辑菜单下可以发现反向选择的命令,选择之后即可完成反选任务.如果有不明白的地方请跟我们联系哦!

网站日志文件分析方法精华版

经太过析站点日记Log文件我们可以看到用户和搜索引擎蜘蛛拜访网站的举止数据,这些数据能让我们阐发出用户与蜘蛛对站点的喜好以及站点的健康环境.在站点日记阐发中,咱们首要需要赏析的是蜘蛛举止. 在蜘蛛爬取及收录过程中,搜寻引擎会给特定权重站点分拨响应的资源量.一个搜寻引擎朋友型的站点理应虚浮操作这些资源,让蜘蛛可以急迅.精确.周全的爬取有价格.用户爱情的形式,而不撙节资源在无用的.走访异常的内容上. 但由于web日志中数据量过大, 所以咱们一般需要凭借web日记赏析工具来检查.经常使用的日记阐发工具

ios应用UIApplication前后台切换代理方法在不同ios系统下的差异

对于一个完善的应用来说,需要在UIApplication的各个代理方法里进行相应的处理,特别是前后台切换时一般需要进行一些特定的操作:而对于不同版本的ios系统,其代理方法居然也存在着一些差异,不由得让人大跌眼镜. IOS4: // Pressing the home button Will resign active. Did enter background. // Tapping app icon on Springboard Will enter foreground. Did beco

删除Win8.1系统休眠文件有妙招

  方法一: 以管理员权限运行CMD,打以下命令:"POWERCFG -H OFF"即自动删除该文件.大家看处理前后C盘空间的变化. 方法二: 运行命令gpedit.msc打开策略组,依次打开"Computer Configuration--Administrative Templates--System--Shutdown",双击"Require use of hybrid boot",设置为"Disabled". Wind