很多时候我们只是遇到了偶现的bug.或者只拿到.crash日志。很难分析出现bug的原因
第1步:.这是拿到的一段.crash日志。表示看不懂。没关系,我们现在进行分析
*注意我标红色的地方
Incident Identifier: 6A141CBA-A424-47E1-9EE8-2AD84F341DA2
CrashReporter Key: 1fbc08723232e938610aa7189b641d0e773aa875
Hardware Model: iPhone8,1
Process: YiTuo_Swift [28967]
Path: /private/var/containers/Bundle/Application/C8E3B591-3602-4736-8523-5DD330BB5BB0/YiTuo_Swift.app/YiTuo_Swift
Identifier: com.renywell.YiTuo-Swift
Version: 1 (1.1.6)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.renywell.YiTuo-Swift [5948]
Date/Time: 2017-12-27 19:50:19.0831 +0800
Launch Time: 2017-12-27 17:39:11.6231 +0800
OS Version: iPhone OS 11.1.2 (15B202)
Baseband Version: 4.00.01
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Application Specific Information:
abort() called
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000184f49348 __pthread_kill + 8
1 libsystem_pthread.dylib 0x000000018505d344 pthread_kill$VARIANT$mp + 396
2 libsystem_c.dylib 0x0000000184eb8fb8 abort + 140
3 libswiftCore.dylib 0x0000000104b84ef8 0x104894000 + 3084024
4 libswiftCore.dylib 0x0000000104b85000 0x104894000 + 3084288
5 libswiftCore.dylib 0x0000000104bb2c24 0x104894000 + 3271716
6 YiTuo_Swift 0x0000000102604a60 0x1024d8000+ 1231456
7 Moya 0x0000000103fcf720 0x103fc0000 + 63264
8 Moya 0x0000000103fd17cc 0x103fc0000 + 71628
9 Moya 0x0000000103fd76d8 0x103fc0000 + 95960
10 Moya 0x0000000103fd8124 0x103fc0000 + 98596
11 Moya 0x0000000103fcc04c 0x103fc0000 + 49228
12 Alamofire 0x000000010368b438 0x10363c000 + 324664
13 Alamofire 0x000000010364d7cc 0x10363c000 + 71628
14 libdispatch.dylib 0x0000000184db5088 _dispatch_call_block_and_release + 24
15 libdispatch.dylib 0x0000000184db5048 _dispatch_client_callout + 16
16 libdispatch.dylib 0x0000000184dc1b74 _dispatch_main_queue_callback_4CF$VARIANT$mp + 1016
17 CoreFoundation 0x00000001853d9eb0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
18 CoreFoundation 0x00000001853d7a8c __CFRunLoopRun + 2012
19 CoreFoundation 0x00000001852f7fb8 CFRunLoopRunSpecific + 436
20 GraphicsServices 0x000000018718ff84 GSEventRunModal + 100
21 UIKit 0x000000018e8cc2e8 UIApplicationMain + 208
22 YiTuo_Swift 0x0000000102a4b7c8 0x1024d8000 + 5715912
23 libdyld.dylib 0x0000000184e1a56c start + 4
第二步:找到对应的DSYM文件,我直接上图了。但切记,一定要和崩溃版本是一致的
*我现在是用在调试测试机debug时生成的dsym,如果是线上的,要到window->organizer->archives里面去找了。具体可以百度,我就不多说了。
第3步:最关键了。来分析出错的原因。
在终端进入到DSYM的路径
dwarfdump --uuid YiTuo_Swift.app.dSYM
atos -arch arm64 -o YiTuo_Swift.app.dSYM/Contents/Resources/DWARF/YiTuo_Swift -l 0x1024d8000 0x0000000102604a60
注意后面2个地址参数就是上面.crash日志里的第6行的对应2个红的地址。前面是程序基地址,后面是方法的堆栈地址。
之后终端输出YTModifyUserInfoViewModel.getCityDatas(),我们就定位到问题的原因,直接去代码里排错就可以了。哈哈
下面是我直接贴出来终端的输出:
leiniweierMac-mini:~ wangfei$ cd /Users/wangfei/Library/Developer/Xcode/DerivedData/YiTuo_Swift-cmopmnsvdhfinggwvnlevuvlrqlx/Build/Products/Debug-iphoneos
leiniweierMac-mini:Debug-iphoneos wangfei$ ls
ASJCollectionViewFillLayout Pods_YiTuo_Swift.framework
Alamofire Presentr
AlamofireImage Result
Charts RxCocoa
DateTools RxSwift
FloatRatingView SDWebImage
HandyJSON SVProgressHUD
IQKeyboardManager SnapKit
KeychainAccess SwiftLocation
M13Checkbox YiTuo_Swift.app
MJRefresh YiTuo_Swift.app.dSYM
Moya YiTuo_Swift.swiftmodule
leiniweierMac-mini:Debug-iphoneos wangfei$ dwarfdump --uuid YiTuo_Swift.app.dSYM
UUID: CCD18452-ECAF-34A2-A4F1-88CE1E25669E (arm64) YiTuo_Swift.app.dSYM/Contents/Resources/DWARF/YiTuo_Swift
leiniweierMac-mini:Debug-iphoneos wangfei$ atos -arch arm64 -o YiTuo_Swift.app.dSYM/Contents/Resources/DWARF/YiTuo_Swift -l 0x1024d8000 0x0000000102604a60
closure #1 in YTModifyUserInfoViewModel.getCityDatas() (in YiTuo_Swift) (YTModifyUserInfoViewModel.swift:0)