一、首先在桌面建立一个crash的文件夹
1.xcode->windows->organizer->archives 找到app 右键show in finder 。
2.然后你就会看到你的.xcarchive文件,然后显示包内容,把.DYSM文件和.app文件拷贝到crash文件夹中
二、下面我们要找到symbolicatecrash工具的地址
1.打开终端输入以下命令:find /Applications/Xcode.app -name symbolicatecrash -type f
你会找到:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
2.用命令将symbolicatecrash拷贝到crash文件夹中,与.DYSM和.app文件放到一起
cp /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /Users/yang/Desktop/crash
这样就将symbolicatecrash拷贝到了crash文件夹下
3.然后再将crash文件一同拷贝到crash文件夹下
这里稍微说一下怎么取得crash文件。在xcode6之前crash文件是在organizer里面 在xcode6之后在windows->devices里面,选择你crash的设备,然后导出crash文件到crash文件夹下
三、执行symbolicatecrash
1.打开终端切换到crash文件夹的目录下
在这里推荐一个叫go2shell的软件,可以在crash文件夹下点击直接进入crash文件夹的目录下,挺方便的
2.执行命令
./symbolicatecrash myApp.crash myApp.app.dSYM > test.txt
(1).此时有可能出现Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 60.
这个时候只需要输入export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" 再重新执行命令就可以了
(2).除了以上可能出现的问题外,还有可能出现version不一致的问题,这是因为.DYSM和.app文件与.crash文件不匹配的原因,需要version一致后才能正常运行
3.如果终端执行成功之后,在crash文件夹下会出现test.txt文件,这就是解析之后的文件
四、下面开始分析解析后的文件
打开test.txt文件,假如是这样的:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x30eaadfc __pthread_kill + 8
1 libsystem_pthread.dylib 0x30f28d33 pthread_kill + 59
2 libsystem_c.dylib 0x30e4a905 abort + 73
3 libc++abi.dylib 0x301899c5 abort_message + 85
4 libc++abi.dylib 0x301a0e25 std::__terminate(void (*)()) + 145
5 libc++abi.dylib 0x301a08ab __cxa_rethrow + 99
6 libobjc.A.dylib 0x30864dcf objc_exception_rethrow + 39
7 CoreFoundation 0x2309b6b9 CFRunLoopRunSpecific + 629
8 CoreFoundation 0x2309b42f CFRunLoopRunInMode + 103
9 GraphicsServices 0x2a40a0a5 GSEventRunModal + 133
10 UIKit 0x26686355 UIApplicationMain + 1437
11 myApp 0x00096e77 0x5c000 + 241271
12 libdyld.dylib 0x30de4aad start + 1
我们得到的是0x00096e77这个地址出现了crash。
然后我们执行命令dwarfdump --lookup 0x00096e77 -arch armv7 myApp.app.DSYM 就可以定位到crash的位置。
以后还会补充。