iOS crash日志的处理

来源:互联网 发布:游戏编程权威指南 pdf 编辑:程序博客网 时间:2024/05/22 04:32

根据crash日志的来源,处理方法可以分为2类

1、crash日志来自于真机,并能找的到dYSM文件:

对于这种情况,分如下几个步骤处理,
材料:dYSM,crash日志,crash的app(可通过iTunes或iTools导出)

步骤一:

判断dYSM和crash的app属于“同一个打包”

可以通过一个小工具dwarfdump判断是否是同一个UUID,
dwarfdump --uuid YourApp.app/YourApp
dwarfdump --uuid YourApp.app.dSYM
判断得到的两个UUID是否一致,一致继续步骤,不一致则进入第二类

步骤二

获取symbolicatecrash

symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode6.1.app请换成你的Xcode名称)

/Applications/Xcode6.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

在终端中输入:

find /Applications/Xcode6.1.app -name symbolicatecrash -type f

把得到的地址/Applications/Xcode6.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/ 拷贝出来

在终端中输入:open/Applications/Xcode6.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/

拷贝出symbolicatecrash

步骤三

symbol化.crash日志

首先用cd命令进入到crash文件夹下,然后输入以下命令

export DEVELOPER_DIR="/Applications/Xcode6.1.app/Contents/Developer"

./symbolicatecrash /Users/xxxx/Desktop/crash/InOrder.crash /Users/xxxx/Desktop/crash/InOrder.app.dSYM > Control_symbol.crash


2、crash来自于其他或者找不到dYSM文件

在介绍这类之前首先要介绍一些基础知识,
堆栈地址(stack address) = 基地址 (load address)+ 偏移地址(offset)
crash日志如下
Last Exception Backtrace:
0   CoreFoundation                       0x23d94c1f __exceptionPreprocess + 127
1   libobjc.A.dylib                      0x318bcc8b objc_exception_throw + 36
2   CoreFoundation                       0x23d94929 -[NSException raise] + 6
3   Foundation                           0x24a775ab -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 260
4   Foundation                           0x249de677 -[NSObject(NSKeyValueCoding) valueForKey:] + 200
5  
AppName                                 0x002c5509 0xb9000 + 2147593
6   AppName
                                0x00233feb PBWireFormatGetTagFieldNumber + 5572

如上:stack address = 0x002c5509
load address =0xb9000
offset = 2147593
使用下面命令即可:

atos -arch armv7 -o AppName -l0xb9000 0x002c5509

如果没有基地址 load address

根据公式,可以通过

load address = stack address - offset

6  AppName                                 0x00233feb PBWireFormatGetTagFieldNumber + 5572

atos -arch armv7 -o AppName -l0x232A270x00233feb































0 0
原创粉丝点击