因项目需要,需要对设备的Crash日志进行解析,以此来定位bug的具体位置。今天我们使用Xcode自带的解析工具symbolicatecrash来进行日志的解析。首先我们创建crash文件夹,用来存放解析需要准备的以下4个文件工具。
1、symbolicatecrash路径:打开终端,输入:find /Applications/Xcode.app -name symbolicatecrash -type f (注意Xcode的路径要写对)
2、xxx.app.dSYM文件:Xcode-->Window-->Organizer-->显示包内容-->dSYMs
3、.app文件:Xcode-->Window-->Organizer-->显示包内容-->Products-->Applications
4、crash文件:可用以下三种方式:
-
Xcode-->Window-->Devices-->选中真机设备-->View Devices Logs-->右键Export Log
-
使用iTunes同步数据,找到崩溃日志目录:Mac OS X:~/Library/Logs/CrashReporter/MobileDevice
-
使用itools第三方软件对iPhone设备管理,打开高级功能-->崩溃日志
准备好以上文件后,打开终端:cd 将crash文件夹拖入终端,然后配置环境变量:export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer (注意Xcode路径)
最后一步,将symbolicatecrash、.crash文件、xxx.app.dSYM文件拖入终端 >new.crash,即可输出解析后的crash文件。
解析前后crash日志对比:
Last Exception Backtrace:
(0x18ed2afd8 0x18d78c538 0x18ed1c1b8 0x1000a1d8c 0x1000a1790 0x1000a27f8 0x194e8f0ec 0x194e8f06c 0x194e795e0 0x194e8e950 0x194e8e46c 0x194e89804 0x194e5a418 0x195653f64 0x19564e6c0 0x19564eaec 0x18ecd9424 0x18ecd8d94 0x18ecd69a0 0x18ec06d94 0x190670074 0x194ebf130 0x10012e2d8 0x18dc1559c)
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x000000018dd25014 0x18dd06000 + 126996
1 libsystem_pthread.dylib 0x000000018ddef334 0x18ddea000 + 21300
2 libsystem_c.dylib 0x000000018dc999c4 0x18dc38000 + 399812
3 libc++abi.dylib 0x000000018d7651b0 0x18d764000 + 4528
4 libc++abi.dylib 0x000000018d77ec04 0x18d764000 + 109572
5 libobjc.A.dylib 0x000000018d78c820 0x18d784000 + 34848
6 libc++abi.dylib 0x000000018d77b5d4 0x18d764000 + 95700
7 libc++abi.dylib 0x000000018d77b1a8 0x18d764000 + 94632
8 libobjc.A.dylib 0x000000018d78c6f8 0x18d784000 + 34552
9 CoreFoundation 0x000000018ec06e00 0x18ebfe000 + 36352
10 GraphicsServices 0x0000000190670074 0x190664000 + 49268
11 UIKit 0x0000000194ebf130 0x194e4a000 + 479536
12 CsiiMobileFinance 0x000000010012e2d8 0x100060000 + 844504
13 libdyld.dylib 0x000000018dc1559c 0x18dc11000 + 17820
Last Exception Backtrace:
0 CoreFoundation 0x18ed2afd8 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x18d78c538 objc_exception_throw + 56
2 CoreFoundation 0x18ed1c1b8 -[__NSSingleObjectArrayI objectAtIndex:] + 128
3 CsiiMobileFinance 0x1000a1d8c -[HomeViewController navBtnEventWithCommond:] (HomeViewController.m:280)
4 CsiiMobileFinance 0x1000a1790 -[HomeViewController navButtonActionWithDic:withFlag:] (HomeViewController.m:202)
5 CsiiMobileFinance 0x1000a27f8 -[HomeViewController leftBtnAction:] (HomeViewController.m:399)
6 UIKit 0x194e8f0ec -[UIApplication sendAction:to:from:forEvent:] + 96
7 UIKit 0x194e8f06c -[UIControl sendAction:to:forEvent:] + 80
8 UIKit 0x194e795e0 -[UIControl _sendActionsForEvents:withEvent:] + 440
9 UIKit 0x194e8e950 -[UIControl touchesEnded:withEvent:] + 576
10 UIKit 0x194e8e46c -[UIWindow _sendTouchesForEvent:] + 2480
11 UIKit 0x194e89804 -[UIWindow sendEvent:] + 3192
12 UIKit 0x194e5a418 -[UIApplication sendEvent:] + 340
13 UIKit 0x195653f64 __dispatchPreprocessedEventFromEventQueue
另外,需要注意.app文件、.dSYM文件、.crash文件三者uuid必须一致,检查三者uuid的方法:
dwarfdump --uuid xxx.app/xxx (xxx工程名)
dwarfdump --uuid xxx.app.dSYM (xxx工程名)
而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括号内。如:
Binary Images:
0x100060000 - 0x10081ffff CsiiMobileFinance arm64 <7d42289bbe82371983fe1548c6fe5244> /var/
网友评论