织梦CMS - 轻松建站从此开始!

罗索

ios crash 从崩溃日志定位问题

落鹤生 发布于 2014-09-28 16:18 点击:次 
当然正常情况下crash问题,我们可以在xcode下调试分析,这种最为直接,但如果终端的ios版本过高,我们的xcode不支持,就只能升级系统+xcode+SDK方式来进行调试分析。
TAG: Troubleshoot  崩溃  

1、ios应用crash的四种类型

·    程序崩溃: 可能是最常见的,经常发生于内存访问出错,异常,或者其他的程序错误

·    内存不足: 系统因为没有足够的内存满足程序需求从而杀死程序出现这种日志.它不同于其他日志的是它没有程序各线程的堆栈信息. Rather than be concerned about what part of your code was executing atthe time of termination, you should investigate your memory usage patterns andyour responses to low memory warnings. Memory usage of each process is reportedin terms of number of memory pages, which as of this writing are 4KB each.

·    强制退出:异常代码 0xdeadfa11. 这出现在用户在程序界面按下关机键知道出现"移动滑块关机",然后长按Home键.用户之所以这么做,很可能因为你的程序无响应,当然也不一定.

·    响应超时: 异常代码 0x8badf00d

·    ios应用crash的四种类型

2、如何获取crash log
iPhone真机上Crash文件的存储路径为:/var/mobile/Library/Logs/CrashReporter
我们走xcode的organizer的device log中获取相应应用的crash信息文件
选中我们关注的应用app,找到关心的异常时间的crash记录,点击右键,选择"Reveal Log in Finder"保存到dSYM文件目录下。
3、如何分析
如果您的应用程序就是由你的xcode生成,那么自动在crash log中会对信息进行翻译,得到有效的crash信息。
如果不是这样,按下面方面处理
a、将crash log文件拷贝到应用程序目录下,比如:test目录下有yourapp.app、yourapp.app.dSYM文件(记住此dSYM与产生此crash log的应用版本是一致的)。
b、执行命令:symbolicatecrash ***.crash ***.app.dSYM | less,在命令行中可以看到解释后的log信息。

symbolicatecrash 命令工具的位置:
在ios3.0及以后版本,/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
在ios3.0以前版本,/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/
4、crash log分析原理
如果程序崩溃,错误信息会发送到Apple的服务器中,软件的开发者们可以很方便在后台获得自己程序的crash log,供自己调试。但随之而来的问题是,我们收到的程序崩溃调试信息多半是汇编语言一样的堆栈代码,同时这些信息并不是在我们debug的时候产生,所以看到这一串 crash log的天书,常常无可奈何。Xcode很好的解决了这一问题,它所提供的Orgainzer分析器加上symbolicatecrash?,可以分析二进制文件以及源代码和crashlog之间的连接,直接找出源程序中出错的代码行。
5、使用其他方法分析crash
如果使用symbolicatecrash?无法定位到出错的代码行的话,怎么整呢?有一个办法,如下:

首先查看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 0x335575aa –arch armv6 Throne.app.dSYM

                   

到此结束,以上为总结后的crash分析,欢迎借鉴。

当然正常情况下crash问题,我们可以在xcode下调试分析,这种最为直接,但如果终端的ios版本过高,我们的xcode不支持,就只能升级系统+xcode+SDK方式来进行调试分析。

(秩名)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201409/17084.html]
本文出处:verydemo 作者:秩名
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容