用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的位置。

以後還會補充。


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