[轉]IOS 崩潰日志分析


以下是一個crash log示例:

 

 1 // 1: Process Information
 2 Incident Identifier: 30E46451-53FD-4965-896A-457FC11AD05F
 3 CrashReporter Key:   5a56599d836c4f867f6eec76afee451bf9ae5f31
 4 Hardware Model:      iPhone4,1
 5 Process:         Rage Masters [4155]
 6 Path:            /var/mobile/Applications/A5635B22-F5EF-4CEB-94B6-FE158D885014/Rage Masters.app/Rage Masters
 7 Identifier:      Rage Masters
 8 Version:         ??? (???)
 9 Code Type:       ARM (Native)
10 Parent Process:  launchd [1]
11  
12 // 2: Basic Information
13 Date/Time:       2012-10-17 21:39:06.967 -0400
14 OS Version:      iOS 6.0 (10A403)
15 Report Version:  104
16  
17 // 3: Exception
18 Exception Type:  00000020
19 Exception Codes: 0x000000008badf00d
20 Highlighted Thread:  0
21  
22 // 4: Threads backtraces
23 Thread 0 name:  Dispatch queue: com.apple.main-thread
24 Thread 0:
25 0   libsystem_kernel.dylib            0x327f2eb4 mach_msg_trap + 20
26 1   libsystem_kernel.dylib            0x327f3048 mach_msg + 36
27 2   CoreFoundation                    0x36bd4040 __CFRunLoopServiceMachPort + 124
28 3   CoreFoundation                    0x36bd2d9e __CFRunLoopRun + 878
29 4   CoreFoundation                    0x36b45eb8 CFRunLoopRunSpecific + 352
30 5   CoreFoundation                    0x36b45d44 CFRunLoopRunInMode + 100
31 6   CFNetwork                         0x32ac343e CFURLConnectionSendSynchronousRequest + 330
32 7   Foundation                        0x346e69ba +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 242
33 8   Rage Masters                      0x000d4046 0xd2000 + 8262
34  
35 Thread 1:
36 0   libsystem_kernel.dylib            0x32803d98 __workq_kernreturn + 8
37 1   libsystem_c.dylib                 0x3a987cf6 _pthread_workq_return + 14
38 2   libsystem_c.dylib                 0x3a987a12 _pthread_wqthread + 362
39 3   libsystem_c.dylib                 0x3a9878a0 start_wqthread + 4
40  
41 // 5: Thread state
42 Thread 0 crashed with ARM Thread State (32-bit):
43     r0: 0x00000000    r1: 0x00000000      r2: 0x00000001      r3: 0x39529fc8
44     r4: 0xffffffff    r5: 0x2fd7d301      r6: 0x2fd7d300      r7: 0x2fd7d9d0
45     r8: 0x2fd7d330    r9: 0x3adbf8a8     r10: 0x2fd7d308     r11: 0x00000032
46     ip: 0x00000025    sp: 0x2fd7d2ec      lr: 0x001bdb25      pc: 0x30301838
47   cpsr: 0x00000010
48  
49 // 6: Binary images
50 Binary Images:
51 0xd2000 -    0xd7fff +Rage Masters armv7  <f37ee6d2c7b334868972e0e9c54f7062> /var/mobile/Applications/A5635B22-F5EF-4CEB-94B6-FE158D885014/Rage Masters.app/Rage Masters
52 0x2fe41000 - 0x2fe61fff  dyld armv7  <75594988728831d98e1f7c4c7b7ca29d> /usr/lib/dyld
53 0x327f2000 - 0x32808fff  libsystem_kernel.dylib armv7  <f167dacec44b3a86a8eee73400ff7a83> /usr/lib/system/libsystem_kernel.dylib
54 0x328a8000 - 0x328bdfff  libresolv.9.dylib armv7  <e79b59a3406f34d9b37f8085955115ce> /usr/lib/libresolv.9.dylib
55 0x32a70000 - 0x32b35fff  CFNetwork armv7  <3e973794a4d13428bb974edcb2027139> /System/Library/Frameworks/CFNetwork.framework/CFNetwork
56 0x32b7a000 - 0x32cc3fff  libicucore.A.dylib armv7  <0253932c1b9038a0849ef73c38e076ca> /usr/lib/libicucore.A.dylib
57 0x32cc4000 - 0x32cc5fff  CoreSurface armv7  <b3f9d4e8dd803a48b88c58a0663d92a3> /System/Library/PrivateFrameworks/CoreSurface.framework/CoreSurface
58 0x32f65000 - 0x32f8afff  OpenCL armv7  <f7706501012430fc94ed99006419fba9> /System/Library/PrivateFrameworks/OpenCL.framework/OpenCL
 

下面,我們來一起看下上述crash log每個section的含義:

(1)Process Information

        這部分給出了進程crash后的部分信息

  • Incident Identifier crash報告的唯一標識
  • CrashReporter Key crash報告映射到Device Identifier的唯一鍵值(key)。表面上看上去沒有任何含義,但實際上給我們提供了一個有用信息,假如我們所獲得的大量crash log擁有同樣的Crashreport Key,一定程度上說明這個crash問題並不是普遍存在,也許只是對一些特定的設備存在。
  • Hardware Model 當前設備類型。假如我們所獲得的大量crash log擁有同樣的Hardware Model,很大程度上可以說明app在該類設備上運行存在適配的問題。
  • Process app的名字。

(2)Basic Information

        這部分給出了crash的一些基本信息:crash發生的時間,當前設備上操作系統的版本等。如果多數crash log擁有相同的iOS版本號,一定程度上說明app對於該版本iOS系統存在適配問題。

(3)Exception

        這部分給出了crash的異常類型,異常錯誤碼和拋出異常的線程。

(4)Threads backtraces

        這部分給出了crash時app所有線程的堆棧記錄,列出crash時函數調用堆棧。比如:

 

 

        以上,包含四列:編號,調用的庫或工程的名稱,函數指針(被調用的方法的地址),文件地址+行編號

 

(5)Thread state

        這部分給出了crash時寄存器中的值。事實上,堆棧記錄已經提供了類似的信息。

(6)Binary images

        這部分列出了crahs時加載的所有文件。

 

接下來,我們在看一個內存警告的crash log

 

可以看到,第一部分和之前的crash log內容類似,這里對其他部分的含義作簡要的說明:

  • Free pages  代表可用內存,每個page近似為4KB,故,上面的log里面顯示的可用內存為3,872 KB (or 3.9 MB)
  • Purgeable pages  代表可清除和重用的內存,上面的log顯示為0KB
  • Largest process  crash時占用內存最多的應用
  • Processes  列出進程列表及crash時進程的內存占用情況,包含進程名字,進程唯一標識符,進程使用的page數,app狀態(一般情況下引起crash的app擁有frontmost狀態)

附錄1:

        分析崩潰日志示例

         atos -o YourApp.app.dSYM/Contents/Resources/DWARF/YourApp 0x00062867

 

附錄2:

 

        這里有一些比較常見的異常碼:

        1)0x8badf00d  記作“ate bad food”,這個異常一般是因為系統監視器發現超時現象,比如啟動或終止超時,亦或者是長時間響應系統時間(event)。

        2)0xbad22222  標志VoIP類應用因為頻繁啟動被終止。

        3)0xdead10cc  記作“dead lock”,當應用在后台運行時,由於占用(hold onto)系統資源(比如通訊錄數據庫),被操作系統終止。

        4)0xdeadfa11  記作“deadfall”,標志應用程序可能因為無響應被用戶強行終止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM