我们在进行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崩溃日志的更多相关文章

  1. iOS崩溃日志ips文件解析

    iOS崩溃日志ips文件解析  一 简介 测试组的同事在进行稳定性测试时,通常会遇到一些崩溃,然后他们会将这些崩溃日志(一般是ips格式的文件)反馈给开发进行分析,但是这些ips文件中的内容通常是如下 ...

  2. 常用获取Android崩溃日志和IOS崩溃日志的几种方法

    一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:And ...

  3. 详解没有dSYM文件 如何解析iOS崩溃日志

    Xcode支持崩溃日志自动符号化,前提是本地有当时Build/Archive生成的dSYM文件,iOS崩溃日志符号化后,可以帮助开发者更好的定位问题,但如果dSYM文件丢失或拿到的崩溃日志不是标准的c ...

  4. iOS 崩溃日志分析(个人总结,最实用)

    iOS 崩溃日志分析(个人总结,最实用) 要分析奔溃日志需要三个文件:crash日志,symbolicatecrash分析工具,.dSYM符号集 0. 在桌面创建一个crash文件夹 1. 需要Xco ...

  5. iOS崩溃日志

    今天看crash report ,有这样两个crash: 调用 stopUpdatingLocation 函数的是一个CLLocationManager 类型的对象,为什么报错的时候会把这个对象转成N ...

  6. Xcode查看iOS崩溃与崩溃日志分析

    一.造成崩溃的原因 1.代码中存在bug 2.Watchdog 超时机制 3.用户强制退出 4.低内存终止 5.其他违法系统规则的操作,大部分是内存问题 二.崩溃的类型 1.信号错误类 (1)EXC_ ...

  7. iOS崩溃日志分析-b

    1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查 ...

  8. 如何看iOS崩溃日志

    重点:Triggered by Thread这句话后边的线程号,快速定位问题出现在那个线程,是否是你的锅:Triggered by Thread所指的线程表示导致异常.崩溃的线程 下边内容转自简书 简 ...

  9. iOS 崩溃日志 Backtrace的符号化

    iOS的崩溃日志配合dsym文件可以找到崩溃时的backtrace,这是解决崩溃的最重要的信息. 如果是在同一台mac上打包, 导入crash log时候会自动将backtrace符号化,可以看到方法 ...

  10. iOS崩溃日志分析

    Incident Identifier: 55864905-937C-4172-B435-2ACA13D3070ECrashReporter Key: b85cab13431711060a5fab55 ...

随机推荐

  1. 部署redis集群

    1.redis部署 redis单实例部署参考:https://www.cnblogs.com/silgen/p/16537299.html 版本:6.2.7 集群:6个节点(redis集群至少3个节点 ...

  2. java学习之springboot

    0x00前言 呀呀呀时隔好久我又来做笔记了,上个月去大型保密活动了,这里在网上看了一些教程如果说不是去做java开发我就不做ssm的手动整合了采用springboot去一并开发. Spring Boo ...

  3. 修复 docker build 错误 "ERROR: No build stage in current context"

    若 docker build 时遇到了错误 "ERROR: No build stage in current context",则有可能是没有将 FROM 命令语句放置在第一行. ...

  4. hyperworks2021位安装教程

    hyperworks2021位安装教程:1.先使用"百度网盘客户端"下载hw21_EN_x64软件安装包到电脑磁盘英文路径文件夹下,并鼠标右击进行解压缩,然后在文件夹内找到hwDe ...

  5. SolidEdge ST8安装教程

    SolidEdge ST8安装教程: 1.使用百度云客户端下载Solidedge ST8软件安装包,打开软件安装文件夹: 2.选择.ISO安装文件,打开.ISO安装文件,可以解压或使用虚拟光驱加载: ...

  6. C++初阶(stack+queue)

    stack stack介绍 stack是一种先进后出的数据结构,只有一个出口,类似于栈.stack容器哦允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之后,没有任何其他办法可以存取stack的其 ...

  7. apt-mirror 制作麒麟桌面版内网源

    apt-mirror 制作麒麟桌面版内网源 一.修改apt软件安装源 1.修改source.list安装源 vi /etc/apt/sources.list 添加: deb http://archiv ...

  8. dp状态设计

    迎接仪式 题目描述 LHX 教主要来 X 市指导 OI 学习工作了.为了迎接教主,在一条道路旁,一群"Orz 教主 er"穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一 ...

  9. ES文件浏览器局域网传输文件分析

    软件下载链接 1.前言 我之前从手机上传输到电脑上一些apk进行分析,都是使用es文件浏览器这款软件获取 app,传输方面使用QQ,这样很麻烦,走外网流量暂且不提,总是感觉浪费掉了局域网这个环境.简单 ...

  10. CmakeLists简单使用总结

    单文件工程和多级目录工程CmakeLists.txt编写分享 你若发现该帖中有待商榷的地方,还请指正赐教,先行拜谢了! 1 main.c单文件工程CmakeLists.txt 1.1 目录结构 1.2 ...