iOS分析崩溃日志 dYSM,友盟统计错误分析

el/2024/2/25 22:35:07


目录 (?)

[-]

  1. 前言
  2. dYSM文件
  3. 崩溃日志
  4. 提取崩溃日志中有用的信息
  5. 开始分析
  6. 查找bug
  7. 结语

前言

  iOS分析定位崩溃问题有很多种方式,但是发布到AppStore的应用如果崩溃了,我们该怎么办呢?通常我们都会在系统中接入统计系统,在系统崩溃的时候记录下崩溃日志,下次启动时将日志发送到服务端,比较好的第三方有umeng之类的。今天我们来讲一下通过崩溃日志来分析定位我们的bug。

dYSM文件

  分析崩溃日志的前提是我们需要有dYSM文件,这个文件是我们用archive打包时生成的.xcarchive后缀的文件包。一个良好的习惯是,在你打包提交审核的时候,将生成的.xcarchive与ipa文件一同拷贝一份,按照版本号保存下来,这样如果线上出现问题可以快速的找到你想要的文件来定位你的问题。

崩溃日志

崩溃日志都会像下面这样:

NSConcreteMutableAttributedString addAttribute:value:range:: nil value
(null)
((CoreFoundation                      0x0000000185c642f4 <redacted> + 160libobjc.A.dylib                     0x00000001974880e4 objc_exception_throw + 60CoreFoundation                      0x0000000185c64218 <redacted> + 0Foundation                          0x0000000186a9dfb4 <redacted> + 152Xmen                                0x10073fb30 Xmen + 7600944Xmen                                0x1006bbbf4 Xmen + 7060468UIKit                               0x000000018a9a47fc <redacted> + 60UIKit                               0x000000018a9a512c <redacted> + 104UIKit                               0x000000018a6b2b6c <redacted> + 88UIKit                               0x000000018a9a4fd4 <redacted> + 444UIKit                               0x000000018a78e274 <redacted> + 1012UIKit                               0x000000018a999aac <redacted> + 2904UIKit                               0x000000018a785268 <redacted> + 172UIKit                               0x000000018a6a1760 <redacted> + 580QuartzCore                          0x0000000189fe9e1c <redacted> + 152QuartzCore                          0x0000000189fe4884 <redacted> + 320QuartzCore                          0x0000000189fe4728 <redacted> + 32QuartzCore                          0x0000000189fe3ebc <redacted> + 276QuartzCore                          0x0000000189fe3c3c <redacted> + 528QuartzCore                          0x0000000189fdd364 <redacted> + 80CoreFoundation                      0x0000000185c1c2a4 <redacted> + 32CoreFoundation                      0x0000000185c19230 <redacted> + 360CoreFoundation                      0x0000000185c19610 <redacted> + 836CoreFoundation                      0x0000000185b452d4 CFRunLoopRunSpecific + 396GraphicsServices                    0x000000018f35b6fc GSEventRunModal + 168UIKit                               0x000000018a70afac UIApplicationMain + 1488Xmen                                0x1008cf9c0 Xmen + 9238976libdyld.dylib                       0x0000000197b06a08 <redacted> + 4
)
dSYM UUID: 30833A40-0F40-3980-B76B-D6E86E4DBA85
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: Xmen
Base Address: 0x000000010007c000

是不是看的一脸懵逼,下面我来教大家如何结合crash log 与 dYSM文件 来分析定位出代码崩溃在哪一个文件的哪一行代码

提取崩溃日志中有用的信息

  • NSConcreteMutableAttributedString addAttribute:value:range:: nil value 崩溃的原因是value为nil
  • ” 4 Xmen 0x10073fb30 Xmen + 7600944” 它指出了应用名称,崩溃时的调用方法的地址,文件的地址以及方法所在的行的位置,我们需要的是这一个:”0x10073fb30”。
  • “dSYM UUID: 30833A40-0F40-3980-B76B-D6E86E4DBA85”。
  • “CPU Type: arm64”。

开始分析

  • 打开终端进入到你的dYSM文件的目录下面: 
    cd /Dandy/XMEN/上线版本/2.0.17_105/aaaa.xcarchive/dSYMs
  • 验证下崩溃日志中的UUID与本地的dYSM文件是否是相匹配的: 
    “Xmen”为你的app名称 
    dwarfdump --uuid Xmen.app.dSYM  
    结果是:
UUID: BFF6AE00-8B5F-39BD-AFD0-27707C489B25 (armv7) Xmen.app.dSYM/Contents/Resources/DWARF/Xmen
UUID: 30833A40-0F40-3980-B76B-D6E86E4DBA85 (arm64) Xmen.app.dSYM/Contents/Resources/DWARF/Xmen
  • 1
  • 2
  • 1
  • 2

发现与我们日志中的:UUID和CPU Type是相匹配的

  • 查找错误 
    dwarfdump --arch=arm64 --lookup 0x10073fb30 /Dandy/XMEN/上线版本/2.0.17_105/aaaa.xcarchive/dSYMs/Xmen.app.dSYM/Contents/Resources/DWARF/Xmen
    “arm64”与”0x1008cf9c0”分别对应于上面我们从日志中提取出来的有用信息 
    “/Dandy/XMEN/上线版本/2.0.17_105/aaaa.xcarchive/dSYMs/Xmen.app.dSYM/Contents/Resources/DWARF/Xmen”对应于你本地dYSM文件目录 
    “Xmen”对应于你的app名称 

    dwarfdump --arch=arm64 --lookup 0x1000551ec SP2P_7.app.dSYM/Contents/Resources/DWARF/SP2P_7


    结果像下面这样:
File: /Dandy/XMEN/上线版本/2.0.17_105/aaaa.xcarchive/dSYMs/Xmen.app.dSYM/Contents/Resources/DWARF/Xmen (arm64)
Looking up address: 0x000000010073fb30 in .debug_info... found!
0x00219b05: Compile Unit: length = 0x00003dd0 version = 0x0002 abbr_offset = 0x00000000 addr_size = 0x08 (next CU at 0x0021d8d9)
0x00219b10: TAG_compile_unit [107] *
AT_producer( "Apple LLVM version 8.0.0 (clang-800.0.42.1)" )
AT_language( DW_LANG_ObjC )
AT_name( "/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View/DSSellerOrderSectionHeaderView.m" )
AT_stmt_list( 0x001272a9 )
AT_comp_dir( "/Dandy/checkSvn/IOS/xmen" )
AT_APPLE_major_runtime_vers( 0x02 )
AT_low_pc( 0x000000010072b8ac )
AT_high_pc( 0x000000010074e350 )
0x0021aec5: TAG_subprogram [119] *
AT_low_pc( 0x0000000100739810 )
AT_high_pc( 0x000000010074006c )
AT_frame_base( reg29 )
AT_object_pointer( {0x0021aee3} )
AT_name( "-[DSSellerOrderSectionHeaderView updateContentWithOrderData:isEdit:]" )
AT_decl_file( "/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View/DSSellerOrderSectionHeaderView.m" )
AT_decl_line( 248 )
AT_prototyped( 0x01 )
0x0021af36: TAG_lexical_block [138] *
AT_ranges( 0x00008640
[0x000000010073cf90 - 0x000000010073fb88)
[0x000000010073fbc0 - 0x000000010073fbc4)
End )
Line table dir : '/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View'
Line table file: 'DSSellerOrderSectionHeaderView.m' line 680, column 9 with start address 0x000000010073faf8
Looking up address: 0x000000010073fb30 in .debug_frame... not found.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

我们来从终端结果来分析出我们想要的结果: 
这一行告诉我们崩溃的代码所在的文件的目录

Line table dir : '/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View'
  • 1
  • 1

这一行告诉我们崩溃代码所在的具体文件

AT_decl_file( "/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View/DSSellerOrderSectionHeaderView.m" )
  • 1
  • 1

这一行告诉我们崩溃代码是在哪一个方法里面

AT_name( "-[DSSellerOrderSectionHeaderView updateContentWithOrderData:isEdit:]" )
  • 1
  • 1

这一行告诉我们崩溃代码具体在哪一行了

Line table file: 'DSSellerOrderSectionHeaderView.m' line 680, column 9 with start address 0x000000010073faf8
  • 1
  • 1

好的,现在我们分析到了崩溃代码在哪一行了,下面我们来找一找bug

查找bug

  我们的代码都应该有托管平台,每个版本上线都需要打一个tag,这是一个好习惯。下面我拉下我崩溃的对应版本的tag,找到崩溃代码那一行:

  结合崩溃日志中告诉我:崩溃的原因是value为nil,发现是因为receiverTelephone字段中有中文导致转url时为nil导致的,下面的解bug就看各自本领啦。

结语

  希望对您有帮助,谢谢支持~

参考文章:

http://www.cocoachina.com/ios/20150720/12627.html

http://www.jianshu.com/p/115ef29b2c90

http://blog.csdn.net/u012072580/article/details/53739688


附上:

$ dwarfdump --uuid SP2P_7.app.dSYM UUID: AEE06486-ECFB-3D44-8446-422378ED8399 (armv7) SP2P_7.app.dSYM/Contents/Resources/DWARF/SP2P_7 UUID: 0CEB8AEB-2FA9-3501-A9E9-3FF5D149A763 (arm64) SP2P_7.app.dSYM/Contents/Resources/DWARF/SP2P_7 $ dwarfdump --arch=arm64 --lookup 0x100348fdc /Users/mz/Desktop/111/2017_8.7.4.xcarchive/dSYMs/SP2P_7.app.dSYM/Contents/Resources/DWARF/SP2P_7




http://www.ngui.cc/el/4893970.html

相关文章

iOS webview尾部加自定义view,并且有个黑条

链接:http://blog.csdn.net/wqs1028/article/details/51273981 在 webView 上添加视图,页面需要和webView一起上下滑动,所以实现方法大概有两种 (一)把需要添加的视图添加到webView上 // 添加额外的滚动附近区域的内容] CGFloat topImgHeight = 250 * RectScale; …

芒果iOS开发之duplicate symbols for architecture x86_64错误

【主要内容:】 1. 错误提示 2. 分析错误原因 3. 解决问题办法 一、错误提示 在我们写代码过程中可能会经常遇到这样一个错误&#xff1a; [objc] view plain copy <span style"font-size:32px;color:#ff0000;">ld: 4 duplicate symbols for architecture x86_…

面试资料整理(整理中~)

1.介绍下内存的几大区域&#xff1f; 栈区,堆区,静态区(全局区),常量区,代码区 动态数据区一般就是”堆栈”,栈是线性结构,堆是链式结构. 本地变量在堆栈中.通过堆栈的基地址和偏移量来访问本地变量 动态内存分配有系统根据程序需要即时分配,且分配的大小就是程序要求的大小. …

ios 申请企业(299$)开发者账号2017

2018,最近申请企业开发者账号,总结一下流程: 一、Apple开发者账号分类: 除了给教育机构专门使用的教育账号外,Apple开发者账号分为以下三类: 个人账号: (Individual) 个人申请,不需要公司资质,仅限个人使用,可以发布应用到App Store,费用$99一年。 公司账号:Comm…

iOS解决应用被拒:5.1.1 Legal: Privacy - Data Collection and Storag

一、Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage 被拒原文 应用程序请求用户同意访问相机和位置&#xff0c;但没有在权限模式警告中明确该功能的使用。相机、定位使用场景提示文本不够明确&#xff0c;需提示用户为何打开此功能 2017年12月8日 上午5:5…

ios 9 statusBar style

状态栏的相关设置(UIStatusBar) 设置statusBar的【前景部分】 简单来说&#xff0c;就是设置显示电池电量、时间、网络部分标示的颜色&#xff0c; 这里只能设置两种颜色&#xff1a; 默认的黑色&#xff08;UIStatusBarStyleDefault&#xff09;白色&#xff08;UIStatusBar…

UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)

在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求。 第一种方式是通过设置按钮中图片文字的偏移量。通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下&#xff1a; /*!**方式一***/ - (void)updateBtnStyle_rightImage:(UIButton *)btn {CGFloat btnI…

iOS 12.2(16E227)真机调试包

手机系统更新到12.2&#xff0c;发现手机无法进行真机调试了&#xff0c;我又不想下载最新版本的Xcode。看到Xcode提示缺少iOS 12.2(16E227) 调试包&#xff0c;于是就去网上找了找资源。 提示&#xff1a;This iPhone 8 (Model A1863, A1905, A1906, A1907) is running iOS 1…

Word添加参考文献(删除调整后文献序号自动更新)

转一个百度链接 链接&#xff1a;https://jingyan.baidu.com/article/91f5db1b63215c1c7f05e3af.html 超级详细的