iOS崩溃日志 如何看
日志主要分为六个部分:进程信息、基本信息、异常信息、线程回溯、线程状态和二进制映像。
我们在进行iPhone应用测试时必然会在“隐私”中找到不少应用的崩溃日志,但是不会阅读对于很多人来说简直头疼。在此为大家详细介绍一下具体的阅读方法,希望大家可以更快的定位BUG。首先我们先看一下从iPhone中随机抽出的一个Crash日志:
//1. 进程信息
Hardware Model: iPhone9,1
Process: com.sogou.sogouinput.BaseKeyboard[4447]
Path: /private/var/containers/Bundle/Application/D121D4D7-C3EE-4861-B5AF-10C367749E24/SogouInput.app/PlugIns/com.sogou.sogouinput.BaseKeyboard.appex/com.sogou.sogouinput.BaseKeyboard
Identifier: com.sogou.sogouinput-.basekeyboard
Version: 79794 (4.1.0)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.sogou.sogouinput-.basekeyboard[4557] //2. 基本信息
Date/Time: 2016-11-22 18:55:46.2041 +0800
Launch Time: 2016-11-22 18:55:45.4011 +0800
OS Version: iPhone OS 10.0.2 (14A456)
Report Version: 104 //3. 异常信息
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype:KERN_INVALID_ADDRESS at 0x006e006e00000010
Triggered byThread: 7 //4. 线程回溯(显示发生crash线程的信息)
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x0000000185fa016cmach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000185f9ffdcmach_msg + 72
2 CoreFoundation 0x0000000186f9dcec __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x0000000186f9b908 __CFRunLoopRun + 1132
4 CoreFoundation 0x0000000186eca048 CFRunLoopRunSpecific + 444
5 GraphicsServices 0x000000018894d198GSEventRunModal + 180
6 UIKit 0x000000018cea4628 -[UIApplication _run] + 684
Thread 7 name: SGInputThread
Thread 7 Crashed:
0 libsystem_c.dylib 0x0000000185eda77cfclose + 40
1 libsystem_c.dylib 0x0000000185eda778fclose + 36
2 ...gou.sogouinput.BaseKeyboard 0x000000010034e420 t_fileRead::Close()(t_file.cpp:251)
3 ...gou.sogouinput.BaseKeyboard 0x000000010034e49c t_fileRead::Open(unsignedshort const*) (t_file.cpp:221)
4 ...gou.sogouinput.BaseKeyboard 0x00000001002ac8f4t_lbsDict::AddSCD(unsigned short const*, int) (t_lbsDict.cpp:218)
5 ...gou.sogouinput.BaseKeyboard 0x00000001003f718ct_convertInterface::AddSCD(unsigned short const*, int)(t_convertInterface.cpp:544)
6 ...gou.sogouinput.BaseKeyboard 0x0000000100362478t_pyDictInterface::BuildExtDict(unsigned short const*, s_cellDictInput*,s_cellDictOutput*) (Dict.cpp:961) //5. 进程状态
Thread 7 crashedwith ARM Thread State (64-bit):
x0: 0x0000000000000000 x1:0x0000000185f1b89c x2: 0x0000000000000000 x3:0x00000001080e422c
x4: 0x0000000100000001 x5:0x0000000000000001 x6: 0x0000000000000000 x7: 0x0000000000000000
x8: 0x000000004f4e4345 x9:0x0000000000000038 x10: 0x0000000000000010 x11:0x000000000000001f
x12: 0x000000000000000d fp:0x000000016e399d50 lr: 0x0000000185eda778 sp:0x000000016e399d40
pc:0x0000000185eda77c cpsr:0x20000000 //6. 二进制映像
Binary Images:
0x100fa8000 -0x100fd7fff dyld arm64 <fc8715469f7b30228b67a5ae12cadf10> /usr/lib/dyld
0x102a88000 -0x102a8ffff sdk.dylib arm64 <5d710be25db4309d8b5e344066a9cb29>/System/Library/Caches/com.apple.xpc/sdk.dylib
0x1859a4000 -0x1859a5fff libSystem.B.dylib arm64 <8788325e11bc31a39b075a3497d26ebd> /usr/lib/libSystem.B.dylib
0x1859a6000 -0x1859fbfff libc++.1.dylib arm64 <95f6dd603b933208ba95cc2d84613c54> /usr/lib/libc++.1.dylib
0x1859fc000 -0x185a1cfff libc++abi.dylib arm64 <286b3adc78d1308eaa0d6f10914b1fa7>
日志组成分析:
在上述六个部分中,我们最需要关注的是异常信息和线程回溯的内容。
1. 进程信息:发生crash进程的相关信息
Hardware Model: 标识设备类型
Process:应用名称
Path:所在路径
Identifier:程序ID
Version:版本号
Code Type:处理器架构
2. 基本信息:给出了一些基本信息,包括闪退发生的日期和时间,设备的iOS版本。
3. 异常信息:崩溃时抛出的异常类型,还能看到异常编码和抛出异常的线程。
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at0x006e006e00000010
Triggered by Thread: 7
Exception Type异常类型:通常包含Signal信号 和 EXC_BAD_ACCESS等。
Exception Codes:异常编码:
Crashed Thread:发生Crash的线程id
注:
具体信号说明参见iOS异常捕获
详细的异常编码代表的含义请参考:Hexspeak
因此我们可以确定本次崩溃原因是内存访问错误
4. 线程回溯:回溯是闪退发生时所有活动帧清单。它包含闪退发生时调用函数的清单。
实际上我们直接从iPhone中导出的崩溃日志应该是一串地址表示的,如下:
AppName 0x0000000100205280 0x0000000100028000 + 1954432
AppName 0x00000001002ae59c 0x0000000100028000 + 2647440
大家可以通过symbolicatecrash命令和dSYM文件将最后的两列解析为具体的方法名和行数。(具体使用方法大家可以自行查找)
在这里我们就可以看到详细的方法名,这样就能帮助开发同学定位到具体位置。
5. 线程状态:闪退时寄存器中的值。一般不需要这部分的信息,因为回溯部分的信息已经足够让你找出问题所在。
6. 二进制映像:闪退时已经加载的二进制文件。
低内存崩溃:
因为低内存崩溃日志与普通崩溃日志略有不同,所以分开说明一下。
iOS设备检测到低内存时,虚拟内存系统发出通知请求应用释放内存。这些通知发送到所有正在运行的应用和进程,试图收回一些内存。
如果内存使用依然居高不下,系统将会终止后台线程以缓解内存压力。如果可用内存足够,应用将能够继续运行而不会产生崩溃报告。否则,应用将被iOS终止,并产生低内存崩溃报告。低内存崩溃日志上没有应用线程的堆栈回溯。相反,上面显示的是以内存页数为单位的各进程内存使用量。被iOS因释放内存页终止的进程名称后面你会看到jettisoned 字样。如果看到它出现在你的应用名称后面,说明你的应用因使用太多内存而被终止了。
低内存崩溃日志看起来像这样:
当应用发生低内存闪退时,你必需看看应用中内存使用的方式,以及是如何处理低内存警告的。你可以使用Instruments工具中使用Allocations 和 Leaks来发现内存分配问题和内存泄漏问题。如果你不知道如何利用Instruments 检查内存问题。
转载至搜狗测试
iOS崩溃日志 如何看的更多相关文章
- iOS崩溃日志
今天看crash report ,有这样两个crash: 调用 stopUpdatingLocation 函数的是一个CLLocationManager 类型的对象,为什么报错的时候会把这个对象转成N ...
- 常用获取Android崩溃日志和IOS崩溃日志的几种方法
一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:And ...
- iOS崩溃日志ips文件解析
iOS崩溃日志ips文件解析 一 简介 测试组的同事在进行稳定性测试时,通常会遇到一些崩溃,然后他们会将这些崩溃日志(一般是ips格式的文件)反馈给开发进行分析,但是这些ips文件中的内容通常是如下 ...
- 详解没有dSYM文件 如何解析iOS崩溃日志
Xcode支持崩溃日志自动符号化,前提是本地有当时Build/Archive生成的dSYM文件,iOS崩溃日志符号化后,可以帮助开发者更好的定位问题,但如果dSYM文件丢失或拿到的崩溃日志不是标准的c ...
- iOS 崩溃日志分析(个人总结,最实用)
iOS 崩溃日志分析(个人总结,最实用) 要分析奔溃日志需要三个文件:crash日志,symbolicatecrash分析工具,.dSYM符号集 0. 在桌面创建一个crash文件夹 1. 需要Xco ...
- 如何看iOS崩溃日志
重点:Triggered by Thread这句话后边的线程号,快速定位问题出现在那个线程,是否是你的锅:Triggered by Thread所指的线程表示导致异常.崩溃的线程 下边内容转自简书 简 ...
- iOS崩溃日志分析
Incident Identifier: 55864905-937C-4172-B435-2ACA13D3070ECrashReporter Key: b85cab13431711060a5fab55 ...
- iOS崩溃日志分析-b
1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查 ...
- [转]IOS 崩溃日志分析
以下是一个crash log示例: // 1: Process Information Incident Identifier: 30E46451-53FD--896A-457FC11AD05F Cr ...
随机推荐
- Assert类的静态方法
五:常用断言 在NUnit中,断言是单元测试的核心.NUnit提供了一组丰富的断言,这些断言是Assert类的静态方法.如果一个断言失败,方法的调用不会返回值,并且会报告一个错误.如果一个测试包含多个 ...
- [MIT6.006] 8. Hashing with Chaining 散列表
一.字典 在之前课里,如果我们要实现插入,删除和查找,使用树结构,最好的时间复杂度是AVL下的Ο(log2n),使用线性结构,最好的复杂度为基数排序Ο(n).但如果使用字典数据类型去做,时间复杂度可为 ...
- 面试都要问的Spring MVC
MVC总结 1. 概述 还是之前的三个套路 1.1 是什么? Spring提供一套视图层的处理框架,他基于Servlet实现,可以通过XML或者注解进行我们需要的配置. 他提供了拦截器,文件上传,CO ...
- 基于物联网的O2O养猪平台
引言:随着生活水平的提高,人们会越来越重视食品安全问题.在城市里的人想养头猪,并想看着它快快乐乐长大.但是无奈于自己没时间和精力.而农户想养猪,可能又缺少启动资金,且不能承担大的风险.这时候我的美团式 ...
- sqlilab less32-less37
less-32 过滤了单引号,双引号,斜杠,同时设置数据库为GBK编码,可以考虑宽字节注入, 当设置gbk编码后,遇到连续两个字节,都符合gbk取值范围,会自动解析为一个汉字.用脚本来测试下哪些符合 ...
- 总结MathType中输入小于号的方法
作为一款专业的公式编辑软件,MathType可谓是非常强大,先不说其编辑公式是多么的方便.迅速,但就打开软件界面,看到不可估算的数学符号有那么多,你就会感叹它的强大,竟然能把绝大部分的数学符号都汇聚于 ...
- Camtasia中对录制视频进行编辑——音效
市场上有很多的视频处理软件,形形色色的软件往往会使人眼花缭乱,而对于那些短视频的制作者来说,拥有一款好的视频处理软件会让自己的视频收获更多的点赞.那么今天我便给大家推荐一款同时具有录屏和编辑视频功能的 ...
- 如何用ABBYY解决文档图像存在缺陷,OCR 准确性低的问题
扭曲的文本行.歪斜.噪声及扫描图像和数码照片中常见的其他缺陷可能会降低识别质量.ABBYY FineReader,提供各种 自动和手动工具去除这些缺陷. 如何手动编辑图像 如果您禁用了自动预处理功能或 ...
- 如何在IDM中设置代理服务器?
很多时候,大家下载文件都是在国外的一些网站上进行下载,这样不可免会受到自身国内网络的限制,另一方面下载源为避免服务器带宽占用过多而限制下载速率,这就会导致文件下载极慢,甚至几KB每秒. 这种情况是不是 ...
- Java中类加载的过程
类加载过程 这里的加载过程是严格按照加载开始顺序进行的,注意是加载开始而不是加载完成.也就是有可能会有两个或几个阶段是同时进行的. 比如下面提到的验证过程中的符号引用验证是在解析阶段开始之后进行. 加 ...