1、崩溃日志分析的原因
在实际开发中,我们或许会经常碰到程序崩溃,但是有时候又很难复现这种崩溃的情况;或者是我们上传到appstore后,程序可能会崩溃,这个时候会导致用户对程序的不满,然而我们却无法要求用户复现他的操作步骤,崩溃的问题而无法得到有效的解决;又或者测试人员测出程序崩溃,但是开发人员由于种种原因而导致无法对崩溃的问题进行很好的复现。在这些无法复现的情况下,我们可以查看crashReport,这能够很好的解决记录着程序崩溃的函数名称和模块名称以及崩溃的行数。我们只需要根据解析出来的日志就可以直接对崩溃的地方进行debug,可以对程序崩溃的地方有一个很好的解决办法。
2、崩溃日志的分类
1、应用程序退出(一般是指用户正常操作程序导致的程序异常退出)。
2、低内存,当应用程序的内存试用达到一定程度后,会发出内存警告,如
果不进行一下处理操作,内存继续增加,达到内存使用上限时苹果会终
止应用程序。
3、用户强制退出程序
4、 watchdogtimeout:透过一个timer去观察某个事件是否已经超过预期的时
间,如果是的话就发出中断告诉OS结束此程式,最主要的原因都是因
为synchronous http request导致整个画面不能动弹,毫无反应。
3、如何进行崩溃日志解析
1、取得crashReport,不同的平台取得日志的目录不一样。
Mac os目录: ~/Library/Logs/CrashReporter/MobileDevice/
XP: C:\Documents and\<USERNAME>\Application Data\
Apple Computer\Logs\CrashReporter\MobileDevice\<DEVICE_NAME>
Windows vista or 7: C:\Users\<USERNAME>\AppData\Roaming\AppleComputer\Logs
\CrashReporter\MobileDevice\<DEVICE_NAME>
2、获取到crashReport后,打开查看只是一些16进制的地址,我们无法获取到有用的信息,这个时候我们只需要查看崩溃日志里面的UUID,在xcode中打开crashReport,找到Binary images:在这个目录下面第一行的尖括号里面的就是我们需要的UUID.
3、打开终端,运行命令:dwarfdump --uuid /usr/crash/IHexin.app/IHexin(前面加上改文件的路径) 查看程序包的UUID.
4、同(3),运行命令:dwarfdump --uuid /usr/crash/IHexin.app.dSYM查看UUID。
5、在上面步骤中(2、3、4)的三个UUID相同的情况下才有可能解析出崩溃日志。运行命令:symbolicatecrash /usr/crash/IHexin.crash /usr/crash/IHexin.app.dSYM > /usr/crash/xxxxx_symbol.crash。
6、第5步中,xxxxx_symbol.crash即为解析出来的崩溃日志,可以查看到崩溃的线程以及堆栈。然后根据堆栈的信息调试崩溃的函数。
另外:崩溃日志可以在xocde中解析,但是我没有试成功。可以参见
http://developer.apple.com/library/ios/#technotes/tn2151/_index.html
注意:(1)symbolicatecrash在xcode4中的位置为:
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
(可以将symbolicatecrash程序拷贝到/usr/bin中就可以在命令行中直接调用了)
(2).dSYM文件和.app文件必须放到spotlight能够查找到的地方,同时必须保证将要作为日志解析的.dSYM和.app文件以及产生日志文件的app和.dSYM文件版本一致,否则肯定解析不出来。