ios崩溃分析

崩溃日志的获取

崩溃日志的获取:ios设备上的应用闪退之后会生成崩溃报告存储在设备上,可以通过这样几种途径获取设备上的日志

1 设备与iTunes Store同步后,会将崩溃日志保存在电脑上,在mac上存储路径是~/Library/Logs/CrashReporter/MobileDevice/,windows xp上 C:/Documents and Settings/Application Data/Apple Computer/Logs/CrashReporter/MobileDevice/DEVICE_NAME,windows vista/7 上C:/Users/AppData/Roaming/Apple Computer/Logs/CrashReporter/MobileDevice/DEVICE_NAME,可以让用户将上述位置的日志发送过来

2 安装了xcode之后,可以从device log中获取崩溃日志

3 应用提交到app store之后,可以从iTunes Connect获取到用户崩溃日志,登录到iTunes Connect之后选择Manage Your Applications,在相应应用图标下的view details按钮然后点击links部分的crash reports

崩溃日志的产生

崩溃日志的产生情况有两种:1 违反操作系统规则:比如启动恢复挂起退出时watchdog超时,用户强制退出或者低内存终止 2 应用程序异常退出 (崩溃报告内容可以参考崩溃报告

watchdog超时

对应的错误码为0x8badf00d,应用退出时不会立即终止,而是退到后台,如果应用响应不够快,系统有可能终止此应用,并产生一个崩溃日志。这些需要响应的事件包括与下列UIApplicationDelegate方法相对应的:

application:didFinishLaunchingWithOptions:

applicationWillResignActive:

applicationDidEnterBackground:

applicationWillEnterForeground:

applicationDidBecomeActive:

applicationWillTerminate:

为了避免watchdog超时,需要注意的是不要把耗时的网络操作放在主线程

用户强制退出

应用阻塞界面并停止响应之后,用户可以双击home,并将其终止,同时生成崩溃日志,但如果用户正常操作下终止应用并不会产生崩溃。通常按home退出应用之后10分钟左右应用会被系统中止,此时不产生崩溃文件。

低内存终止

前台运行的应用会拥有访问和使用内存的最高优先级,但并不意味着它可以使用所有内存:每个应用只能使用一部分可用内存。在应用要求的内存系统无法供应的时候,系统会释放后台应用的内存以满足它,这种情况下被终止的后台应用不会产生崩溃报告,如果仍然无法满足,则会中止此应用,并为其产生崩溃报告。

通常低内存崩溃报告的process和type在Xcode的日志页面都显示成"Unknown"

崩溃报告

Incident Identifier是崩溃报告的唯一标识符

CrashReporter Key 是与设备标识相对应的唯一键值,虽然它不是真正的设备标识符

Hardware Model 标识设备类型

process是进程名称,紧跟着的数字是进程ID

从Exception type开始的部分是异常信息,接着是线程栈回溯信息

各线程栈信息之后是线程状态,即线程退出时寄存器中的值

紧接着是二进制映像,即崩溃发生时加载的二进制文件

将十六进制地址转化为源代码文件名称及行数偏移的过程称为符号化,已经Archive的应用版本会保存有相应的.dSYM文件,xcode在打开有对应的.dSYM文件的崩溃文件时会自动进行符号化。注意,就算是同一份源代码,多次构建产生的应用二进制文件和.dSYM文件都会不同。

如果你使用Build 和 Archive 命令,这些文件会自动放在适当位置。 如果不是使用Build 和 Archive命令,放在Spotlight能够搜索到的位置(比如Home目录)即可

低内存闪退

低内存崩溃报告上并没有应用线程的堆栈回溯,而会显示以内存页数为单位的进程内存使用量,被iOS因释放内存页终止的进程名称后面你会看到jettisoned 字样,xcode 6.3中的低内存崩溃文件是这样

低内存崩溃报告

Free pages 可用内存页数,每页4KB

Purgeable pages 是那部分可被清除或重用的内存

Largest process是闪退时使用大部分内存的应用名称

Processes显示了闪退时各进程列表,还包含内存使用量。包含进程名, 进程唯一标识符, 进程使用的内存页数。最后一列是每个应用的状态。通常,发生闪退的应用的状态是 frontmost

此低内存崩溃报告中占用最大内存的进程占用内存页为166401页,即近665.6MB的内存,总共1GB的内存就这么被生吃了,难怪被终止。

此报告中,占用最大内存的进程与frontmost的进程为同一个,可以确定是其引起了低内存崩溃,当然也有内存与frontmost不一样的时候,比如SpringBoard进程是显示主屏幕应用的,双击home情况下会出现,而且它一直是活动的,其有可能会成为最大进程。

当然,为了避免这样的崩溃发生,在收到低内存通知时,尽可能多地空出内存是不二选择。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容