IOS崩溃Crash分析(MTA腾讯云分析,友盟)

来源:互联网 发布:opengl 纹理变形算法 编辑:程序博客网 时间:2024/05/01 02:44

公司做IOS的走了,东西就丢给了我这个从来没有做过IOS的。最近为了捕获BUG,集成了MTA平台的BUG收集。问题就来了,对于我这种,虽然没有学过OC,但是写写代码还是可以的,xCode中调试下BUG也行,但是碰到这种Crash的,还不带崩溃路径的,完全不知道怎么复现,对于做了半个月IOS的我,的确略坑。

话说,国内的一些bug监控服务,不提供符号化就算了,但是,提供简单符号化,但是没有了堆栈地址,就太坑了。

 Crash堆栈还原:Incident Identifier: C087DE05-CDD8-4B47-B0AE-B0AE1D230CE2CrashReporter Key:   TODOHardware Model:      iPhone8,2Process:         gpsbigben [423]Path:            /var/containers/Bundle/Application/12FD4C9D-7685-4247-9463-A8D222C47A25/gpsbigben.app/gpsbigben Version:         2.7.4 (2.7.5)Code Type:       ARM-64Parent Process:  ??? [1]Date/Time:       2016-06-23 02:45:09 +0000OS Version:      iPhone OS 9.3.1 (13E238)Report Version:  104Exception Type:  SIGABRTException Codes: #0 at 0x180e3411cCrashed Thread:  0Application Specific Information:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Snapshot integerValue]: unrecognized selector sent to instance 0x15656d150'Last Exception Backtrace:0   CoreFoundation                      0x000000018129ae38  + 1241   libobjc.A.dylib                     0x00000001808fff80 objc_exception_throw + 562   CoreFoundation                      0x00000001812a1ccc  + 03   CoreFoundation                      0x000000018129ec74  + 8724   CoreFoundation                      0x000000018119cd1c _CF_forwarding_prep_0 + 925   gpsbigben                           0x00000001001114b8 -[MapController mapView:markerInfoWindow:] + 5366   CoreFoundation                      0x00000001812a0ae0  + 1447   CoreFoundation                      0x0000000181198548  + 2848   CoreFoundation                      0x000000018119ce70  + 609   gpsbigben                           0x000000010059ba84 -[GMSDelegateForward forwardInvocation:] + 12010  CoreFoundation                      0x000000018129eaa4  + 40811  CoreFoundation                      0x000000018119cd1c _CF_forwarding_prep_0 + 9212  gpsbigben                           0x0000000100575de0 -[GMSMapView infoWindowForMarker:] + 8413  gpsbigben                           0x00000001005730f8 -[GMSMapView setSelectedMarker:] + 8414  gpsbigben                           0x0000000100125698 -[OnlineViewController mapView:didTapMarker:] + 10815  CoreFoundation                      0x00000001812a0ae0  + 14416  CoreFoundation                      0x0000000181198548  + 28417  CoreFoundation                      0x000000018119ce70  + 6018  gpsbigben                           0x000000010059ba84 -[GMSDelegateForward forwardInvocation:] + 12019  CoreFoundation                      0x000000018129eaa4  + 40820  CoreFoundation                      0x000000018119cd1c _CF_forwarding_prep_0 + 9221  gpsbigben                           0x0000000100574448 -[GMSMapView didTapMarker:] + 7222  gpsbigben                           0x0000000100589da8 -[GMSMarker wasTapped] + 6423  gpsbigben                           0x0000000100497f8c -[GMSVectorMapView didTapAt:] + 125624  UIKit                               0x0000000186975c8c  + 16425  UIKit                               0x000000018658a5dc  + 17226  UIKit                               0x0000000186417688  + 78427  UIKit                               0x000000018697728c  + 7228  UIKit                               0x00000001863d63d8  + 37229  UIKit                               0x00000001863d3154  + 240430  CoreFoundation                      0x00000001812507b0  + 3231  CoreFoundation                      0x000000018124e554  + 37232  CoreFoundation                      0x000000018124e984  + 92833  CoreFoundation                      0x0000000181178d10 CFRunLoopRunSpecific + 38434  GraphicsServices                    0x0000000182a60088 GSEventRunModal + 18035  UIKit                               0x000000018644df70 UIApplicationMain + 20436  gpsbigben                           0x00000001001097ec -[QBTitleView .cxx_destruct] + 15237  libdyld.dylib                       0x0000000180d168b8  + 4Thread 0 Crashed:0   libsystem_kernel.dylib              0x0000000180e3411c __pthread_kill + 81   libsystem_c.dylib                   0x0000000180da5dac abort + 1402   gpsbigben                           0x00000001003a89a8 -[PLPLCrashReporter generateLiveReportWithThread:] + 03   CoreFoundation                      0x000000018129b1c0  + 6524   libobjc.A.dylib                     0x000000018090023c  + 1125   libc++abi.dylib                     0x00000001808f2f44  + 166   libc++abi.dylib                     0x00000001808f2b10 __cxa_rethrow + 1447   libobjc.A.dylib                     0x0000000180900120 objc_exception_rethrow + 448   CoreFoundation                      0x0000000181178db8 CFRunLoopRunSpecific + 5529   GraphicsServices                    0x0000000182a60088 GSEventRunModal + 18010  UIKit                               0x000000018644df70 UIApplicationMain + 20411  gpsbigben                           0x00000001001097ec -[QBTitleView .cxx_destruct] + 15212  libdyld.dylib                       0x0000000180d168b8  + 4Thread 1:0   libsystem_kernel.dylib              0x0000000180e354d8 kevent_qos + 81   libdispatch.dylib                   0x0000000180ce7648  + 0Thread 2:0   libsystem_kernel.dylib              0x0000000180e18fd8 mach_msg_trap + 81   CoreFoundation                      0x0000000181250ce8  + 1962   CoreFoundation                      0x000000018124e9ec  + 10323   CoreFoundation                      0x0000000181178d10 CFRunLoopRunSpecific + 3844   CFNetwork                           0x00000001818f9af4  + 4125   Foundation                          0x0000000181c6fe1c  + 10006   libsystem_pthread.dylib             0x0000000180effb28  + 1567   libsystem_pthread.dylib             0x0000000180effa8c  + 08   libsystem_pthread.dylib             0x0000000180efd028 thread_start + 4Thread 3:0   libsystem_kernel.dylib              0x0000000180e18fd8 mach_msg_trap + 81   CoreFoundation                      0x0000000181250ce8  + 1962   CoreFoundation                      0x000000018124e9ec  + 10323   CoreFoundation                      0x0000000181178d10 CFRunLoopRunSpecific + 3844   CoreFoundation                      0x00000001811c6464 CFRunLoopRun + 1125   gpsbigben                           0x00000001003845a4 -[APService clientThreadMain] + 1006   Foundation                          0x0000000181c6fe1c  + 10007   libsystem_pthread.dylib             0x0000000180effb28  + 156

如上的简单符号化信息,做了半个月IOS,的确完全看不懂,百度了两篇关于Crash的文章学习了下,还是大部分看懂了。
http://blog.csdn.net/weiguang_123/article/details/50725865
http://blog.csdn.net/wangyanchang21/article/details/51162325

抓出来了一些重点如下:

Code Type:       ARM-64Application Specific Information:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[5]'Last Exception Backtrace:0   CoreFoundation                      0x00000001818cadb0  + 1241   libobjc.A.dylib                     0x0000000180f2ff80 objc_exception_throw + 562   CoreFoundation                      0x00000001817ae1a0  + 3003   CoreFoundation                      0x00000001817b9c48  + 524   gpsbigben                           0x00000001000c8768 _mh_execute_header + 182120

不得不说,半符号化就是坑,不然可以通过上述的文章中说的atos直接得到错误位置了。atos的用法大致如下:

$ xcrun atos -o executable -arch architecture -l loadAddress  address ... 

仔细看弄出来的重点,发现一个很奇怪的东西,_mh_execute_header,猜测这个是崩溃的地址,但是符号化失败,后面的+号,带着的是正确的偏移量,如果你仔细看过一些半符号化的Crash,+号后面带的就不是正确的偏移量了。那么
崩溃的地址_mh_execute_header=0x1000c8768 - 182120 = 0x1000F4ED0

地址就可以得到了,现在首先需要把dSYM文件弄到手,我用的是xcode直接发布的,手上当然没有安装包,由于对IDE不熟,也找不到在电脑的那个路径下面存放这个东西。为了和线上的包一致,只能再次打包,打包成功后选择那个包,右键–Show in Finder,看到了那个包,然后右键—显示包内容。然后找到DSYM文件。打开终端:

jeech:Documents jeech$ xcrun atos -o gpsbigben.app.dSYM/Contents/Resources/DWARF/gpsbigben -arch arm64 -l 0x10009c000 0x1000c8768-[RegisterController submitClicked] (in gpsbigben) (RegisterController.m:481)

这样,就看到了崩溃的错位位置。行号是481,才知道如何复现,经过尝试,完全可以复现,并且错误额问题跟

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[5]'

的描述一致。问题解决。

这种方法,对于完全没有符号化或者符号化失败的Crash,是挺好的,但是国内的很多都是半符号化的,是提示了你的问题在那个方法内,但是没有行号。一洗比较奇怪的问题只能靠猜了。

PS:对于我这种没有基础的,完全算是半路出家做IOS,OC语法基本没学过,只是稍微了解IOS系统,但是碰到问题不慌,了解下系统的生命周期,代码模仿着写,只要思路没有什么问题,语言只不过是表现形式罢了,碰到新东西还是容易玩得开。

1 0
原创粉丝点击