標籤:
前提:保留打包發布時的 myapp.xcarchive檔案(註:在xcode-window-Organizer-Archives 中可以找到,通過命令打包需要自己當時備份下這個檔案)
1、從myapp.xcarchive中得到myapp.app.dSYM 和myapp 兩個檔案並放到同一個檔案夾中
2、找到一條該版本app 在友盟bug統計中崩潰日誌的,在其中可以找到崩潰時的地址資訊如:0x1001ed424
友盟統計的崩潰log
Application received signal SIGSEGV(null)( 0 CoreFoundation 0x000000018400e5b8 <redacted> + 160 1 libobjc.A.dylib 0x00000001947600e4 objc_exception_throw + 60 2 CoreFoundation 0x000000018400e4dc <redacted> + 0 3 myapp 0x1005d0fdc myapp + 6098908 4 libsystem_platform.dylib 0x0000000194f7c94c _sigtramp + 52 5 myapp 0x1001ed424 myapp + 2020388 6 myapp 0x1001ed240 myapp + 2019904 7 myapp 0x1001ed364 myapp + 2020196 8 myapp 0x1001e6654 myapp + 1992276 9 myapp 0x10024a85c myapp + 2402396 10 libdispatch.dylib 0x0000000194da53ac <redacted> + 24 11 libdispatch.dylib 0x0000000194da536c <redacted> + 16 12 libdispatch.dylib 0x0000000194da9980 _dispatch_main_queue_callback_4CF + 932 13 CoreFoundation 0x0000000183fc5fa4 <redacted> + 12 14 CoreFoundation 0x0000000183fc404c <redacted> + 1492 15 CoreFoundation 0x0000000183ef10a4 CFRunLoopRunSpecific + 396 16 GraphicsServices 0x000000018d0935a4 GSEventRunModal + 168 17 UIKit 0x00000001888263c0 UIApplicationMain + 1488 18 myapp 0x10029b5dc myapp + 2733532 19 libdyld.dylib 0x0000000194dcea08 <redacted> + 4)dSYM UUID: BF6D8B68-25AD-3D83-9EFA-2EC4662771CCCPU Type: arm64Slide Address: 0x0000000100000000Binary Image: myappBase Address: 0x0000000100064000
3、開啟終端,切換到該檔案夾,運行下面命令 終端中將顯示錯誤出現的的詳細資料
xcrun atos -arch arm64 -o myapp.app/myapp 0x1001ed424
或者
dwarfdump --lookup 0x1001ed424 -arch arm64 myapp.app.dSYM
註:對一些特殊複雜的bug引起的崩潰,通過此命令的分析,也得不到什麼有用的錯誤資訊提示。
關於dSYM
dSYM 在打包的過程中產生的儲存app 16 進位函數地址映射資訊的中轉檔案,通過出錯的函數地址去查詢 dSYM 檔案中程式對應的函數名和檔案名稱,從而得到錯誤詳細資料。
iOS 友盟統計的bug分析