用symbolicatecrash解决crash问题

今天第一天写技术博客,主要是想通过写博客记录一些自己作为ios开发工程师的一些历程。

好啦,现在进去正题。由于自己的程序今天发现了一些bug,却不知道怎么解决,所以今天就研究了下用symbolicatecrash来分析crash log来找到问题的根源。

一、首先在桌面建立一个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的位置。

以后还会补充。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章