即刻App年轻人的同好社区
下载
砖家代码搬运工
7月前
作为鹅厂一名专业的iOS客户端程序员,我决定给即刻的小伙伴分享一个有趣的技术小知识,如果你不是研发岗位,并且这个小知识可以让你对代码产生兴趣,老夫也甚是欣慰啦。

即使我要经常做一些很不愿意做的需求,很多时候,我有在重复劳动,但是偶尔去挖掘一下有趣的东西,让我觉得我正在从事一份非常浪漫的职业。

切入正题~

昨天我的leader叫我去他工位给我讲需求,说着说着他冷启动了我们的App,大概10多秒一直卡在启动页面,气氛一度降至冰点,然后App直接crash了。。。。

后来他把crash日志分享到群里,我点开看了,是著名的 8badf00d 异常。

crash原因很简单,我们App启动时间太长了被系统的watchdog直接kill掉了,下面是苹果官方文档对watchdog的介绍:

watchdog  In order to keep the user interface responsive, iOS includes a watchdog mechanism. If your application fails to respond to certain user interface events (launch, suspend, resume, terminate) in time, the watchdog will kill your application and generate a watchdog timeout crash report. The amount of time the watchdog gives you is not formally documented, but it's always less than a network timeout.

简单来说,就是系统为了保证用户界面的响应能力,引入了一个watchdog机制,当你的应用长时间无法启动或者无法响应用户操作,就会被看门狗直接咬死。这个watchdog就翻译成看门狗吧,哈哈哈,名字很好玩。

最有趣的是0x8badf00d的含义!

然后我们我看到crash文件内的异常码是 0x8badf00d,这是一个16进制的数值,除去0x就是8badf00d,8的英文就是eight,谐音是ate,也就是eat(吃)的过去式,bad 就是坏的,food是食物,但是16进制没有字母O,只能用数字0来代替food中的字母O啦,再加上 watchdog,就是看门狗吃到了坏的食物,于是App崩溃了。

为了让大家更加记忆深刻,对代码产生兴趣,可以打开自己的手机,按如下步骤点击:设置》隐私〉分析与改进》分析数据〉在上方输入框搜索alipay,可以看到一些ips文件。随便点进去一个就可能看到有0x8badf00d的崩溃,当然前提是你安装了支付宝,并且使用过程中app闪退了。

我贴一下我的手机看到的支付宝的崩溃:
34930

来自圈子

圈子图片

无用但有趣的冷知识

100万+人已经加入