热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS关于友盟错误分析“ApplicationreceivedsignalSIGSEGV”报错定位

错误信息:ApplicationreceivedsignalSIGSEGV错误详情:错误详情.png错误分析:SIGSEGV和SIGBUS

错误信息:
Application received signal SIGSEGV
错误详情:

 

错误详情.png

 

错误分析:
SIGSEGV和SIGBUS一般是由于访问已被释放的内存或者调用不存在的方法所致。

错误定位:

单条错误详情.png

XingYunGlobalMeeting -- 应用名称
0x10020d274 -- 崩溃时的调用方法的16进制函数地址
XingYunGlobalMeeting + 2151028 -- 文件的地址以及方法所在的行的位置

接下来就是本文的重点,将这条“密文”解析成“明文”了。

首先,要找到该项目发布时Archive编译出来的.xcarchive文件。这个文件包含了.DSYM文件,可以通过XCode->菜单栏中的Window->Organizer,打开Archives列表,找到对应的文件,点击右键Show in Finder。

通过Organizer找到.xcarchive文件.png

在Finder中显示.xcarchive文件.png

在Finder里所要的.xcarchive文件.png

打开该文件,选中该文件,点击右键 -> 显示包内容。

xcarchive显示包内容.png

说明:正常的话(该版本只Archive一次的话),包里面dSYMs文件夹里只有一个以项目名称命名的.app.dSYM文件(如上图中的XingYunGlobalMeeting.app.dSYM文件)。如果同一版本重新Archive(即多次Archive)的话,会有多个.dSYM文件,此时我们就要根据友盟错误分析错误详情里的倒数第五行的dSYM UUID确定对应的.dSYM文件。

根据UUID确定对应的.dSYM文件.png

然后就要通过这个文件定位错误信息了,共有三种方法:
方法一:使用xcrun atos命令
【说明:最靠谱!推荐使用该方法,特别是该项目的该版本重复Archive的话(即上一步骤有多个.dSYM文件)的话,下面的两种方法可能不能使用】
1、选中上一步骤确定的对应.dSYM文件,点击右键显示包文件,按照路径->Contents->Resources->DWARF,找到以项目名命名的文件。

显示.dSYM文件中的包文件.png

2、打开终端Terminal,输入 atos -o ,然后把上一步中定位的文件拖入终端,补入文件路径,空格,输入友盟错误详情中单条错误信息里的16进制函数地址(如:0x100037da4)
完整命令:
XingYundeMac-mini:~ xingyun$ atos -o /Users/xingyun/Library/Developer/Xcode/Archives/2017-03-20/XingYunGlobalMeeting\ 2017-3-20\ 下午7.20.xcarchive/dSYMs/D29F668F-D4A2-353E-97DC-CD9BFC78695E.dSYM/Contents/Resources/DWARF/XingYunGlobalMeeting 0x100037da4

3、终端返回我们看得懂得的“明文”错误信息:
__41-[MSSBrowseCollectionViewCell createCell]_block_invoke (in XingYunGlobalMeeting) (MSSBrowseCollectionViewCell.m:37)

发生崩溃的方法:-[MSSBrowseCollectionViewCell createCell]_block_invoke
崩溃所在源码文件:MSSBrowseCollectionViewCell.m
发生崩溃的方法在源文件中的行号:37

方法一atos命令解析错误.png

方法二:使用dwarfdump命令
1、可先将.app.dSYM文件拷贝到一目录下备用,如和崩溃日志放在一个目录下。
2、打开终端,cd到该目录下,执行命令:
$ dwarfdump --arch=arm64 --lookup=[崩溃日志上项目对应的某崩溃地址] [dSYM文件的绝对路径]

方法三:可视化工具dSYMTools
下载链接(源码):https://github.com/answer-huang/dSYMTools
下载后在Xcode中运行,然后按照以下使用步骤进行:
1、将打包发布软件时的xcarchive文件拖入软件窗口内的任意位置(支持多个文件同时拖入,注意:文件名不要包含空格)
2、选中任意一个版本的xcarchive文件,右边会列出该xcarchive文件支持的CPU类型,选中错误对应的CPU类型。
3、对比错误给出的UUID和工具界面中给出的UUID是否一致。
4、将错误地址以及 Slide Address 输入工具的文本框中,点击分析。

dSYMTools.png

方法四:友盟错误分析工具
1、下载错误分析工具
,并解压zip得到umcrashtool文件,可将umcrashtool与已下载的xxx.csv文件放入同一目录下。
2、第二步 在terminal中运行umcrashtool命令,参数为错误分析的.csv文件绝对路径,如下:sanzhang$ ./umcrashtool [absolutely_path_of_csv_file] 将umcrashtool与错误分析.csv文件放入同一目录下

csv文件和umcrashtool放在同一目录下.png

3、在terminal中运行umcrashtool,提示如下: Usage: umcrashtool [export-file-path],定位后的代码及行数会写入错误分析-symbol.csv文件,与原文件在同一目录下。用工具打开新生成的xxx-symbol.csv文件,便可查看错误发生的源码文件及行数。

注:如果错误分析没有成功,请先确保对应的 xxx.dSYM 文件在 ~/Library/Developer/Xcode/ 或该路径的子目录下。(对于每一个产品发布时archive操作会将dsym文件存放到~/Library/Developer/Xcode/Archives路径下,因此建议保留该路径下的文件,以便后续用工具分析错误。)



作者:MeaningfulLiu
链接:https://www.jianshu.com/p/59eb849b0486
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


推荐阅读
  • vue使用
    关键词: ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
author-avatar
没有你的日子1976_472
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有