文档章节

iOS Crash文件分析

独-奏
 独-奏
发布于 2014/02/12 20:11
字数 872
阅读 1114
收藏 1

一.iOS crashs一般有如下四种:

  • Application crash

  • Low memory

  • Watchdog timeout

  • User force-quit

当前我们的ERead程序遇到了前三种core问题。只有Application crash文件才会提供有用的crash堆栈。

Low memory 主要是程序申请不到可用的内存或者剩余内存不足以支持程序运行而产生的crash.

WatchDog timeout 是程序100%暂用cpu超过10s而产生的crash文件。 User force-quit :暂时还没搞清什么情况下会出现。 

二.如何找到crash文件  

iPhone真机上Crash文件的存储路径为:/var/mobile/Library/Logs/CrashReporter 可以通过PhoneView(mac下),91助手(windows下)读取。 

需要保存***.app.dSYM 符号文件(生产版本的时候和***.app同在build目录) 

获取crash文件:

可以直接连接到itunes,itunes会自动把crash文件同步到pc机,在pc上的目录是:~/Library/Logs/CrashReporter/MobileDevice下面。 同步完成后也可以在XCode的Window的Organizer下面,找到相应Device设备,选择DeviceLog标签,找到相应的crash文件。

三. crash文件介绍 

一般如果是内存过低引起的core问题,crash文件会命名为“LowMemory-2011-06-05-044757.log”的格式,其中的日期为同步到pc时的日期 

如果是其他原因引起的core问题,crash文件会命名为“ETReader_2011-04-12-103850_adminmato-iPad.crash”的格式,其中日期为同步到pc的时间,adminmato-iPad指的是当前所有设备所取的名称 一般情况下,我们只看第二种的crash文件,第一种crash文件是和手机内存大小及程序占用内存有关,一般情况下不做处理

四.通过crash文件定位问题

(针对Application crash,其他crash文件无法提供有效信息) 把***.app.dSYM和crash文件放到同一个目录下

执行命令:

symbolicatecrash ***.crash ***.app.dSYM | less

就会得到符号化好的crash文件。如果crash是通过itunes同步到pc机,并且在Organizer中查看的话,那么看到的crash是已经由xcode调用symbolicatecrash 命令符号化好了的(右键Reveal Log in Finder可以得到该crash文件)。

crash例子文件如下:

Incident Identifier: 2664D48C-C1D7-43EC-8E89-01D27EE2E7E0
CrashReporter Key:
ae8ae7a933bd6670313190b38a0b7a9cd6fb5329
Hardware Model:
iPhone2,1
Process:     ETReader [3445]
Path:
/var/mobile/Applications/C7C76450-4A8D-4CFE-B662-923523CFADB1/ETReader.app/ETReader
Identifier:    ETReader
Version:
??? (???)
Code Type:  ARM (Native)
Parent Process:  punchd [1]
Date/Time:   2011-04-14 15:21:24.064 +0800
OS Version:  iPhone OS 4.2.1 (8C148a)
Report Version:  104
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0×00000004
Crashed Thread: 0
Thread 0 Crashed:
0  ETReader                0x0009dcc8 0×1000 + 642248
1  ETReader                0x0003baf2 0×1000 + 240370
2   Foundation             0x31cd861c 0x31cc4000 + 83484
3   CoreFoundation     0x3145711c 0×31430000 + 160028
4   CoreFoundation      0x31456dbc 0×31430000 + 159164
5   Foundation              0x31cc7d1c 0x31cc4000 + 15644
6   Foundation              0x31cd123a 0x31cc4000 + 53818
7   UIKit                         0x338ff904 0x3389e000 + 399620
8   UIKit                         0x338fdbb8 0x3389e000 + 392120
9   UIKit                         0x338a27a6 0x3389e000 + 18342
Binary Images:
0×1000 -
0xd2fff +ETReader armv7
<e2cd3c3a2d5d5cecc3ceec0792b50309> /var/mobile/Applications/C7C76450-4A8D-4CFE-B662-923523CFADB1/ETReader.app/ETReader
0x1f5000 -
0x1f5fff +MobileSubstrate.dylib armv6
<93c7cc820225e9453a9f93d3b21a25fa> /Library/MobileSubstrate/MobileSubstrate.dylib
0&times;225000 -
0x226fff +SubstrateLoader.dylib armv6
<073e8f5afee21e96e513e796622bfd6f> /Library/Frameworks/CydiaSubstrate.framework/Libraries/SubstrateLoader.dylib
0x22a000 -
0x22bfff
dns.so armv7
<fcefecb2d5e095ba88127eec3af57ec0> /usr/lib/info/dns.so
0&times;246000 -
0x258fff +SBPandaHome.dylib armv6
<8bfff4a460e806aca029a0b989419225> /Library/MobileSubstrate/DynamicLibraries/SBPandaHome.dylib
0&times;264000 -
0x267fff
libsubstrate.dylib armv6
<9ad52a9dd3b8e54ae1b0a0e5fc58c7a2> /usr/lib/libsubstrate.dylib

发现有针对ETReader的堆栈地址: 

ETReader                      0x0009dcc8 0&times;1000 + 642248
ETReader                      0x0003baf2 0&times;1000 + 240370

 但是如何把地址映射到相应的文件对应的函数呢。 需要在命令行执行如下命令:

dwarftdump –lookup 0x0009dcc8 –arch armv7 ***.app.dSYM

此处到底是armv7还是armv6,在 Binary Images附近可以查看体系结构(红色大字体标注)。

执行完该命令会在控制台上打印出一堆定位信息,好啦后面我就不啰嗦了,可以自己分析啦。 


© 著作权归作者所有

共有 人打赏支持
独-奏

独-奏

粉丝 15
博文 37
码字总数 31176
作品 6
蓬莱
程序员
私信 提问
获取iOS设备上崩溃日志(Crash Log)的方法

获取iOS设备上崩溃日志(Crash Log)的方法:http://www.weste.net/2013/5-20/91509.html iOS怎么分析AppStore上面的Crash Log:http://m.blog.csdn.net/blog/tianjf0514/45201549 iOS Cra......

智能小松鼠
2015/08/25
0
0
100%移植阿里云移动测试技术_竟仅需1周?!——移动测试专有云(3)——内容详解

一、自动化测试服务 Android兼容性测试 Android兼容性测试旨在帮助解决Android应用在不同真机机型上的各类兼容性问题,包括 Crash/ANR分析、6项性能分析、UI检测、3个版本的覆盖安装检测等。...

乐乎无趣
2017/11/02
0
0
iOS开发笔记(九)— 数据库、Crash、内存问题分析

前言 分享iOS开发中遇到的问题,和相关的一些思考,本次内容包括:UIKit的iOS11问题、数据库问题定位、线上Crash处理、内存问题分析。 正文 1、iOS 11的UITabbar的高度异常 问题描述:iOS 1...

落影loyinglin
2018/08/26
0
0
IOS内存常见问题与内存检查工具

iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现的内存泄漏,这些都是iOS平台内存相关的常见问题;本文将会详细介绍...

长平狐
2012/10/25
575
0
iOS仿抖音节拍界面、Swift,MVVM架构完整项目、日历demo、滚动切换分类等源码

iOS精选源码 在Object-C中学习数据结构与算法之排序算法(http://www.code4app.com/thread-14762-1-1.html) 日历-基本功能都有的日历 选择日期 上下月 动画(http://www.code4app.com/thread-3...

sunnyaigd
2018/09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

zabbix安装配置

环境 系统:centos7.5软件版本: mysql: 5.7 zabbix: 3.4.15内网: Port: 10051 IP: 192.168.2.71外网: Port: 34521 Domain: freefrp.cnAgent被动模式(默认) ...

亦漩
26分钟前
2
0
一看就能学会的H5视频推流方案

本文由云+社区发表 作者:周超 导语 随着直播平台爆发式增长,直播平台从 PC 端转战移动端,紧跟着直播的潮流,自己学习实现了一套简单的 H5 视频推流的解决方案,下面就给小伙伴们分享一下自...

腾讯云加社区
29分钟前
3
0
Spring Boot 2.X优雅停止

本文章介绍了正常关闭Spring Boot 应用程序的过程。许多开发人员和架构师总是讨论SpringBoot的应用设计、流量负载、框架和应用模式,但很少有人讨论关闭阶段。生命周期意识可以说一个真正资深...

WUBAOQUAN
39分钟前
4
0
Linux Redis 高可用之主从复制

Redis主从复制简介 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或...

我最喜欢三大框架
46分钟前
3
0
HTML5技术分享之自动化构建工具gulp使用

gulp是是前端开发对代码进行构建的工具,是基于 Nodejs 的自动任务运行器,他能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器...

纤纤郡主
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部