分析iOS Crash文件

原创 2016年06月01日 14:44:32

转自wufawei的博客http://wufawei.com/2014/03/symbolicating-ios-crash-logs/

当你的应用提交到App Store或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢?

上传crash文件
你的应用应当有模块能够在应用程序crash的时候上传crash信息。 要么通过用户反馈拿到crash文件,要么借助自己或第3方的crash上传模块拿到crash文件。

今天要分析的场景是你拿到用户的.crash文件之后,如何符合化crash文件(Symbolicating crash logs)的3种方法。帮助尽快找到crash原因。

crash文件例子
crash文件的部分内容:
Last Exception Backtrace:
0 CoreFoundation 0x30acaf46 exceptionPreprocess + 126
1 libobjc.A.dylib 0x3af0b6aa objc_exception_throw + 34
2 CoreFoundation 0x30a0152e -[__NSArrayM objectAtIndex:] + 226
3 appName 0x000f462a 0x4000 + 984618
4 appName 0x00352aee 0x4000 + 3468014

18 appName 0x00009404 0x4000 + 21508

大家一眼就能看到:
2 CoreFoundation 0x30a0152e -[__NSArrayM objectAtIndex:] + 226

这一行有问题。

但是,第3行和第4行的:
3 appName 0x000f462a 0x4000 + 984618
4 appName 0x00352aee 0x4000 + 3468014

并没有指出到底是app的那个模块导致的问题,如何排查呢?

有如下3种方法

方法1 使用XCode
这种方法可能是最容易的方法了。

需要使用Xcode符号化 crash log,你需要下面所列的3个文件:
1. crash报告(.crash文件)
2. 符号文件 (.dsymb文件)
3. 应用程序文件 (appName.app文件,把IPA文件后缀改为zip,然后解压,Payload目录下的appName.app文件), 这里的appName是你的应用程序的名称。

把这3个文件放到同一个目录下,打开Xcode的Window菜单下的organizer,然后点击Devices tab,然后选中左边的Device Logs。

然后把.crash文件拖到Device Logs或者选择下面的import导入.crash文件。

这样你就可以看到crash的详细log了。 如下图:

方法2 使用命令行工具symbolicatecrash
有时候Xcode不能够很好的符号化crash文件。我们这里介绍如何通过symbolicatecrash来手动符号化crash log。

在处理之前,请依然将“.app“, “.dSYM”和 “.crash”文件放到同一个目录下。现在打开终端(Terminal)然后输入如下的命令:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

然后输入命令:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash appName.crash appName.app > appName.log

现在,符号化的crash log就保存在appName.log中了。

方法3 使用命令行工具atos
如果你有多个“.ipa”文件,多个”.dSYMB”文件,你并不太确定到底“dSYMB”文件对应哪个”.ipa”文件,那么,这个方法就非常适合你。

特别当你的应用发布到多个渠道的时候,你需要对不同渠道的crash文件,写一个自动化的分析脚本的时候,这个方法就极其有用。

这里先介绍一个概念:UUID

什么是UUID
每一个可执行程序都有一个build UUID来唯一标识。Crash日志包含发生crash的这个应用(app)的 build UUID以及crash发生的时候,应用加载的所有库文件的[build UUID]。

那如何知道crash文件的UUID呢?

可以用:
grep “appName armv” *crash

或者
grep –after-context=2 “Binary Images:” *crash

可以得到类似如下的结果:
appName.crash-0x4000 - 0x9e7fff appName armv7 <8bdeaf1a0b233ac199728c2a0ebb4165> /var/mobile/Applications/A0F8AB29-35D1-4E6E-84E2-954DE7D21CA1/appName.crash.app/appName

(请注意这里的0x4000,是模块的加载地址,后面用atos的时候会用到)

如何找到app的UUID
可以使用命令:
xcrun dwarfdump -–uuid

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS通过dSYM文件分析crash

原文链接:http://blog.csdn.net/openglnewbee/article/details/38824139 http://blog.csdn.net/hjy_x/arti...
  • yang3wei
  • yang3wei
  • 2014年10月10日 17:59
  • 10175

iOS Crash文件分析

转:http://www.cocoachina.com/bbs/read.php?tid=180736 下面建议如何用symbolicatecrash工具分析iOS Crash文件: ...
  • sharpyl
  • sharpyl
  • 2015年11月10日 01:08
  • 268

ios crash文件分析

IOS程序在真机运行程序出现crash状况时,机器会自动产生log文件,它包含了在程序crash之前的运行逻辑,分析carsh文件,有效的解决程序在真机上的问题,保证程序良好的稳定性,但是这个cras...

iOS系统Crash文件分析方法

iOS系统Crash文件分析方法  Xcode 4.3的symbolicatecrash的位置和老版本的不一致了。 /Applications/Xcode.app/Contents/Dev...
  • zerocnd
  • zerocnd
  • 2012年07月04日 10:58
  • 3567

iOS .Crash文件分析处理办法 -symbolicatecrash

iOS .Crash文件分析处理办法 -symbolicatecrash
  • safiri
  • safiri
  • 2016年07月06日 17:27
  • 642

iOS 应用程序 Crash文件的理解与分析

Understanding and Analyzing iOS Application Crash Reports https://developer.apple.com/library/ios...
  • jeffasd
  • jeffasd
  • 2016年03月29日 11:50
  • 1394

iOS -- 友盟工具进行Crash分析/dsym文件

项目中集成了友盟统计,自然Crash日志已经在友盟的统计之中,点击错误分析可以看到相关的错误列表,以及简单的crash日志。 如果想看详细的crash详情则需要使用友盟的错误分析工具:umcrasht...

iOS Crash文件分析

转自:http://webcache.googleusercontent.com/search?q=cache:AFD3zpJfMy0J:eggic.com/article/2011/1004/108...

iOS Crash文件分析(二)

Crash文件分析:符号化iOS Crash文件的3种方法 有如下3种方法   方法1 使用XCode 这种方法可能是最容易的方法了。   需要使用Xcode符号化 crash log...

iOS .ips(crash)崩溃报告文件分析

对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug。   iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分析iOS Crash文件
举报原因:
原因补充:

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