日志主要分为六个部分:进程信息基本信息异常信息线程回溯线程状态二进制映像

我们在进行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:0x00000001080e422cx4: 0x0000000100000001            x5:0x0000000000000001        x6: 0x0000000000000000        x7: 0x0000000000000000x8: 0x000000004f4e4345             x9:0x0000000000000038        x10: 0x0000000000000010      x11:0x000000000000001fx12: 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 检查内存问题。

转载至搜狗测试

 

转载于:https://www.cnblogs.com/feiyueNotes/p/7786787.html

iOS崩溃日志 如何看相关推荐

  1. iOS 崩溃日志在线符号化实践

    1. 什么是符号化? 在日常开发中,应用难免会发生崩溃.通常,我们直接从用户导出来的崩溃日志都是未符号化或者部分符号化的,都是一堆十六进制内存地址的集合,可读性较差.未符号化或者部分符号化的崩溃日志对 ...

  2. 如何看iOS崩溃日志

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

  3. iOS崩溃日志符号化及NLP聚类实现

    在解决iOS应用线上崩溃时,我们通常要分析崩溃日志来定位原因.线上崩溃日志一般是未符号或部分符号化的日志,是一堆十六进制的内存地址集合,可读性比较差,这对解决问题几乎没有帮助.所以,我们首先需要先对崩 ...

  4. ios崩溃日志收集_iOS崩溃与日志分析

    在iOS开发中经常需要靠记录日志来调试应用程序.解决崩溃问题等,整理常用的日志输出和崩溃日志分析. 最新更新:2018-11-30 基于CocoaLumberjack 的 Swift使用封装库 一.崩 ...

  5. iOS崩溃日志分析-b

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

  6. 遭遇Crash文件战:教你如何搞定iOS崩溃日志

    请叫我背景 最近在提交应用到App Store的时候,竟然被拒了两次.那时候心里的想法是,尼玛完蛋了,要被老板开除了,我是不是要失业了.于是乎那两周几乎毛脑子都是为什么Apple你这么狠心,我们明明相 ...

  7. iOS崩溃日志的分析

    崩溃日志的产生 iOS中运行App过程中如果发生程序崩溃,会生成一个崩溃日志文件.这个文件会保存的特定系统目录下,扩展名是crash.当手机连接到iTunes时,会将该文件同步到电脑上. 在Mac系统 ...

  8. ios崩溃日志收集_漫谈iOS Crash收集框架

    为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等.追求方便省心,对于保密性要求不高的程 ...

  9. iOS崩溃日志符号化 UUID获取

    1. 符号表是什么? 符号表就是指在Xcode项目编译后,在编译生成的二进制文件.app的同级目录下生成的同名的.dSYM文件. .dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地 ...

  10. iOS应用崩溃日志分析 iOS应用崩溃日志揭秘

    转自:http://www.raywenderlich.com/zh-hans/30818/ios%E5%BA%94%E7%94%A8%E5%B4%A9%E6%BA%83%E6%97%A5%E5%BF ...

最新文章

  1. 子frame获取外部元素
  2. (二十)java多线程之ScheduledThreadPoolExecutor
  3. Go语言MD5加密用法实例
  4. docker报错解决办法:Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp
  5. java设计模式建造_Java设计模式——建造模式(Builder Pattern)
  6. Android 注解的使用与注意事项
  7. Aop 是面向切面编程,
  8. Restlet Client 下载安装
  9. 斗鱼弹幕服务器未响应,斗鱼看不到弹幕的解决方法步骤
  10. IP地址和mac地址的区别
  11. 苹果蓝牙耳机平替哪个好用?商务通话蓝牙耳机推荐
  12. CleanMyMac最新2020注册机
  13. 在网易有数上做数据加工和数据分析的实践
  14. 数据分析师有哪些等级
  15. pytorch中register_hook以及register_forward_hook
  16. JavaScript如何判定一个给定的时间区间在哪些时间段范围内?
  17. JAVA实现的百万英雄,芝士超人等答题,自动搜索答案,答题辅助
  18. parrot无人机蓝牙协议
  19. 比阅读量和粉丝数更重要的是用户ARPU值
  20. 矢量数据-点,线的生成

热门文章

  1. USRP N310+OAI 5G NR分支编译运行
  2. Redis管理及监控工具treeNMS
  3. 研发项目如何配置看板的任务流转
  4. C语言实现键盘记录器
  5. office 公式编辑器 插入花体格式字母
  6. 最详细的联发科刷机教程MediaTek SP Flash Tool教程MTK通用驱动Windows 10 MTK VCOM USB Preloader Drivers
  7. tcs标准编写软件_标准编写工具TCS2017使用指南.PDF
  8. 定制ATP-EMTP电力系统仿真模型程序修改代做
  9. 二次规划——学习笔记
  10. 软件工程毕设(三)·进度考核表