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:崩溃报告的更多相关文章

  1. 【译】理解与分析ios应用的崩溃报告

    源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时,创建一份“崩溃报告”对于理解崩 ...

  2. 转 理解与分析ios应用的崩溃报告

    理解与分析ios应用的崩溃报告 源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时 ...

  3. Mac OS X:禁止崩溃报告-CrashReport

    Mac OS X:禁止崩溃报告 崩溃报告就是CrashReport 至于官方的有关CrashReport的文档在Technical Note TN212 . 一般的默认情况下,当一个应用程序因为各种原 ...

  4. [Windows]_[中级]_[崩溃报告的中级解决方案]

    场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...

  5. iOS- 全方位解析.crash文件崩溃报告

    1.前言 想来每个iOS攻城狮,都免不了要接触.crash文件 那么什么是.crash文件? iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者 ...

  6. [Windows]_[0基础]_[Release程序的崩溃报告minidump解决方式]

    场景: 1. Release的程序崩溃时,崩溃报告能够让开发者查明代码哪里出了问题,用处大大的. 2. 仅仅实用VS的编译器才支持,所以MinGW就无缘了. 3. 使用了未处理异常过滤处理函数. 4. ...

  7. 看懂 游戏《Minecraft》的崩溃报告 服务端/客户端

    如何看懂Minecraft报错的关键信息. 让你如何看懂Minecraft报错 前言 一些俏皮话 寻找崩溃日志 打开崩溃日志 重要的事说三遍 下载文本编辑器 开始分析 深度分析 得出结论 修复报错 解 ...

  8. 关于崩溃报告的日志以及dump文件

    在用户使用软件的过程当中突然产生软件崩溃的问题,必须采取相关的措施去拦截崩溃产生的原因,这有助于程序员解决此类崩溃的再次发生.特别是有些难以复现的崩溃,不稳定的崩溃,更有必要去调查崩溃产生的原因.一般 ...

  9. iOS崩溃报告获取一

    在AppDelegate.m文件中实现函数 void UncaughtExceptionHandler(NSException *exception) { /** * 获取异常崩溃信息 */ NSAr ...

随机推荐

  1. PT与PX,em(%)区别

    字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢?先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点:pt就是point,是印刷行业常用单位,等于1/72英寸. ...

  2. strace 使用

  3. jquery中$.ajax的$.get与$.post使用

    <script type='text/javascript' src='http://ajax.useso.com/ajax/libs/jquery/1.7.2/jquery.min.js?ve ...

  4. python3 解析apk图标

    有两处值小点,一是如何解压缩,另一个是如何写文件,第二点上我找的是phthon2的代码,一直写文件的时候报不是字符串的问题,将打开方式加上"b“的模式搞定 print文件出来直接删除了,原因 ...

  5. STL容器介绍

    STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string. 二 : 关联容器,     有set, multiset, map, mulmap, h ...

  6. python中的formatter的详细用法

    今天抽空学习了一下python中的string service中的formatter的相关用法,主要是为了让自己的代码看起来更加和谐,因为很多java或者c语言过来的开发者都不怎么爱使用python的 ...

  7. allegro 的光绘层概念

    TOP层: board geometry/outline  manufacturing/photoplot_outline                  etch/top              ...

  8. 【Maven实战】archetype的使用和eclipse的配置

    1.之前在进行项目的构建时都是使用手工进行文件夹的建立,maven也给我们提供了一个参数archetype,可以用来进行项目骨架的建立.使用maven archetype:generate进行创建: ...

  9. QT 设置SizePolicy的例子(简单明了)

    http://hi.baidu.com/cybertingred/item/e8eadaad0c7f62f615329be7   QPushButton *left = new QPushButton ...

  10. 【转】linux 原子整数操作详解

    原文网址:http://blog.csdn.net/hunanchenxingyu/article/details/8994379 printk(“%d\n”,atomic_read(&v)) ...