TN2151:崩溃报告
understanding and analyzing ios application crashreports
这个TN涉及了与崩溃相关的 内存耗尽信息,堆栈信息 以及 异常编号 等信息
内存耗尽
内存不足时,虚存系统需要app的协助释放部分内存,内存不足的通知会发送给所有正在运行的app。如果内存压力依然存在,系统会终止后台进程以缓解内存压力。如果释放的内存足够,你的app仍可以运行且不会有crash report产生。否则,app将被终止且产生crash report。
low memory report与其他crash report不同在于没有应用线程的stack trace,每个进程的内存占用是由内存页数标识的,每页4K。且每个被 ios终止的进程名后面都会有一串字符 "(jettisoned)"。如果你的app名旁边有这个字串,则可以确认你的应用是因为内存占用过多而被终止的。否则则不是因为内存压力而崩溃的,这时应该寻找.crash文件。可以checkout WWDC2010 session的 Advanced Memory Analysis with Instruments
需要注意的是,泄漏和分配工具并不会跟踪显存。你需要使用VM tracker工具(instruments Allocations template中)运行app以查看显存使用量。
分析crash report
符号化
crash report 最有趣的部分是应用执行中止时应用的栈回溯信息,这与在调试器中停止执行时的栈trace类似但不同的是其中并未带符号信息(即函数方法名),你所看到的会是十六进制的地址和可执行代码,你需要将这些地址映射成符号,即源代码地址和行数。这个过程需要 上传到app store的二进制app文件及此文件对应的.dsym文件,文件需要完全匹配,否则符号化会不完全。使用 product->Archive命令可以将app与dsym文件打包到你的home/library/developer/xcode/archives目录下。
如果上传app二进制包到 appstore的时候添加了Archive则此应用的crash可以导入 xcode organizer的crash reports tab中。如果要分析开发过程中的crash可能就只能在Devices中view device logs里面查看crash了
异常码
crash log中以 Exception Codes: + 一个或多个十六进制value 为标志的行,这行是特定于处理器的代号,用于辨识crash的进一步信息
0xbaaaaaad: 当前log为整个系统的栈快照,并不是crash report文件(home+volume键可以取stack快照)
0xbad22222: VoIP app 由于重启太频繁而被ios中止
0x8badf00d:watchdog超时(大概是1分钟未向约定的数据空间写数据导致),比如app启动或者退出,或者响应系统事件 花费的时间太长。通常的原因一般是在主线程上做同步的网络操作,无论如何,耗时的操作应该从主线程中移除,以免阻塞主线程。
0xc00010ff: app由于过热引发的系统事件而被系统中止。
0xdead10cc: app由于在后台运行时hold on to 系统资源(比如地址簿数据库)
0xdeadfa11: app 被用户强制中止。用户长按 开机键直到出现“滑动关机”,然后长按home按钮。(需要注意的是,从多任务托盘中移除暂停的app并不会产生crash文件,因为一旦app暂停,ios即可随时将它中止,所以不会有crash文件产生)
原文链接:http://www.jianshu.com/p/2052e215e4f6
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
TN2151:崩溃报告的更多相关文章
- 【译】理解与分析ios应用的崩溃报告
源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时,创建一份“崩溃报告”对于理解崩 ...
- 转 理解与分析ios应用的崩溃报告
理解与分析ios应用的崩溃报告 源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时 ...
- Mac OS X:禁止崩溃报告-CrashReport
Mac OS X:禁止崩溃报告 崩溃报告就是CrashReport 至于官方的有关CrashReport的文档在Technical Note TN212 . 一般的默认情况下,当一个应用程序因为各种原 ...
- [Windows]_[中级]_[崩溃报告的中级解决方案]
场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...
- iOS- 全方位解析.crash文件崩溃报告
1.前言 想来每个iOS攻城狮,都免不了要接触.crash文件 那么什么是.crash文件? iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者 ...
- [Windows]_[0基础]_[Release程序的崩溃报告minidump解决方式]
场景: 1. Release的程序崩溃时,崩溃报告能够让开发者查明代码哪里出了问题,用处大大的. 2. 仅仅实用VS的编译器才支持,所以MinGW就无缘了. 3. 使用了未处理异常过滤处理函数. 4. ...
- 看懂 游戏《Minecraft》的崩溃报告 服务端/客户端
如何看懂Minecraft报错的关键信息. 让你如何看懂Minecraft报错 前言 一些俏皮话 寻找崩溃日志 打开崩溃日志 重要的事说三遍 下载文本编辑器 开始分析 深度分析 得出结论 修复报错 解 ...
- 关于崩溃报告的日志以及dump文件
在用户使用软件的过程当中突然产生软件崩溃的问题,必须采取相关的措施去拦截崩溃产生的原因,这有助于程序员解决此类崩溃的再次发生.特别是有些难以复现的崩溃,不稳定的崩溃,更有必要去调查崩溃产生的原因.一般 ...
- iOS崩溃报告获取一
在AppDelegate.m文件中实现函数 void UncaughtExceptionHandler(NSException *exception) { /** * 获取异常崩溃信息 */ NSAr ...
随机推荐
- Swift - 26 - 函数的基础写法
//: Playground - noun: a place where people can play import UIKit // 无参无返回 // -> Void可以省略不写, 或者写成 ...
- 重拾C++ 基础知识总结(二)
1.标准库string类型: 用户程序要使用string类型对象,必须包含相关头文件 #include <string> 字符串字面值与标准库string类型不是同一种类型,字符串字面值是 ...
- 跟我学android-Android应用基本组件介绍(五)
Activity activity 是最基本的模块,我们成为活动,一个activity通常就是一个单独的屏幕,每一个活动都被实现为一个独立的类,且都继承活动的基类.在activity的实现类里显示用户 ...
- java面试题及答案(基础题122道,代码题19道)
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...
- 13_FCITX输入法安装及问题排查解决
使用linux最沮丧的事情莫过于中文输入法切换不出来,甚至有人错误地认为,要使用中文输入法,必须把“区域和语言”(Region & Language)设置为中国-中文.输入法只是一个软件,和区 ...
- 移动H5前端性能优化指南[托尼托尼研究所]
概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网络平均338KB/s(2. ...
- javascript 向上滚动
<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Co ...
- Spring事务管理中@Transactional的参数配置
Spring作为低侵入的Java EE框架之一,能够很好地与其他框架进行整合,其中Spring与Hibernate的整合实现的事务管理是常用的一种功能. 所谓事务,就必须具备ACID特性,即原子性.一 ...
- GitHub 入门
1. CentOS 安装 Github. # sudo yum install skynet 安装之后查看一下版本. # git --version 2. 注册 Github 账号,登录后阅读 Git ...
- HTML邮件注意事项
1.全局规则之一,不要写<style>标签.不要写class,所有CSS都用style属性,什么元素需要什么样式就用style写内联的CSS. 2.全局规则之二,少用图片,邮箱不会过滤你的 ...