事件起因

因为有事离开的关系,我会将Mac锁屏,macOS有时候会断掉Wi-Fi(为后面发生的这一切埋下了伏笔)。我回来的时候唤醒电脑,习惯性地戴上耳机准备边听音乐边开始下午的“佛系学习”🎧。
然而,又一次让我难过的事情发生了,我播放上午暂停的歌曲,程序显示在播放,而我的电脑却一点点声音都没有。当我去按F11F12的时候,依旧显示是静音,仿佛声音丢失了一般。嗯,当我拔掉耳机插孔时,声音出来了……
好的,我知道这是个bug了,于是开始联系Apple技术支持,希望可以得到解决(最近老是这样实在是有点烦人丷)。在一番聊天过后,技术支持让我做一个“无害操作”——重启电脑,并按住 进行一次重置SMC。也正是这次操作过后,我在启动的过程中,散热风扇开始了“✈️起飞模式”,电脑开始掉帧,开始不断重启并出现下面的场景。我整个人也懵了。🤯

panic message

好了,开始跟客服讨论,进行一大堆的恢复操作,进入Recovery Mode,进行磁盘检查,诸如此类。到了最后,客服也懵了,让我备份数据,重新安装macOS。我:???,不是你让我按的么?怎么一件小事搞成这样了。
最后我打算自己解决一下问题。蛤蛤蛤没想到事情因SMC而起,也因它而落。我忙活半天之后,重新按住 进行一次重置SMC,然后再重启电脑。
这一次成功进入系统!首先就看到了错误报告(要不是我成功进来了,我连报告都看不见😭……)

error report

仔细看了一会儿有关这次macOS的kernel panic错误报告,准备待会儿分析一波。然后进行电脑的检查,最后重启下,没啥问题。总算是有惊无险啊,记录一下。📝


分析错误报告

Panic报告可以帮我们立刻定位内核崩溃原因的必要信息。下面来分析下崩溃的错误信息8😁.

  • 系统报告
    ~ uname -a

Darwin JoyChans-MacBook-Pro.local 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64

  • Kernel Panic报告
    从第一行开始分析

panic(cpu 1 caller 0xffffff800b58776f): Kernel trap at 0xffffff7f8daae964, type 14=page fault

 这一条信息说明,系统之所以出现Panic,主要是由于一个页面错误(type 14=page fault)导致。而这种错误通常代表的是一次无效的读取操作或者是向内存中未映射页面的写入操作。并且我们可以看出,这个寄存器中储存的就是错误指令的地址0xffffff800b58776f.
除此之外,Panic报告中还包含了回溯(backtrace)信息,我们可以跟踪方法调用,或者函数调用的顺序,确定错误指令的执行情况,backtrace信息如下:

Backtrace (CPU 1), Frame : Return Address
0xffffff912e342a50 : 0xffffff800b46c1c6
0xffffff912e342aa0 : 0xffffff800b595274
0xffffff912e342ae0 : 0xffffff800b587544
0xffffff912e342b50 : 0xffffff800b41e1e0
0xffffff912e342b70 : 0xffffff800b46bc3c
0xffffff912e342ca0 : 0xffffff800b46b9fc
0xffffff912e342d00 : 0xffffff800b58776f
0xffffff912e342e70 : 0xffffff800b41e1e0
0xffffff912e342e90 : 0xffffff7f8c27957f
0xffffff912e342fd0 : 0xffffff800bab8d87
0xffffff912e343020 : 0xffffff800bab8893
0xffffff912e343060 : 0xffffff800bab6542
0xffffff912e3430a0 : 0xffffff800b46c081
0xffffff912e3430f0 : 0xffffff800b595274
0xffffff912e343130 : 0xffffff800b587544
0xffffff912e3431a0 : 0xffffff800b41e1e0
0xffffff912e3431c0 : 0xffffff800b46bc3c
0xffffff912e3432f0 : 0xffffff800b46b9fc
0xffffff912e343350 : 0xffffff800b58776f
0xffffff912e3434c0 : 0xffffff800b41e1e0
0xffffff912e3434e0 : 0xffffff7f8daae964
0xffffff912e343600 : 0xffffff7f8dac6054
0xffffff912e343640 : 0xffffff7f8dac5dbc
0xffffff912e343690 : 0xffffff7f8dac5d03
0xffffff912e3436f0 : 0xffffff7f8dac34b1
0xffffff912e343730 : 0xffffff7f8dac86d8
0xffffff912e343760 : 0xffffff7f8daccd54
0xffffff912e3437b0 : 0xffffff7f8daede08
0xffffff912e343830 : 0xffffff7f8daef1ad
0xffffff912e343870 : 0xffffff7f8daefe9e
0xffffff912e3438c0 : 0xffffff7f8dae7360
0xffffff912e343900 : 0xffffff7f8daebac1
0xffffff912e343960 : 0xffffff7f8daa3f23
0xffffff912e3439f0 : 0xffffff7f8c266e99
0xffffff912e343a40 : 0xffffff7f8c26634c
0xffffff912e343a60 : 0xffffff7f8ddf53c2
0xffffff912e343b60 : 0xffffff7f909b95b9
0xffffff912e343d30 : 0xffffff7f909ae80e
0xffffff912e343dd0 : 0xffffff800ba9ad68
0xffffff912e343e40 : 0xffffff800ba7eef5
0xffffff912e343eb0 : 0xffffff800ba7ec9a
0xffffff912e343ed0 : 0xffffff800b4a5844
0xffffff912e343f40 : 0xffffff800b4a53a5
0xffffff912e343fa0 : 0xffffff800b41d557
Kernel Extensions in backtrace:
com.apple.driver.AppleSMC(3.1.9)[2D1E4A3F-A19E-3F12-878D-807CB79CD55F]@0xffffff7f8c26e000->0xffffff7f8c28afff
dependency: com.apple.iokit.IOACPIFamily(1.4)[95DA39BB-7C39-3742-A2E5-86C555E21D67]@0xffffff7f8c265000
dependency: com.apple.iokit.IOPCIFamily(2.9)[AEA4C7F5-CCB0-338B-B471-CF28A9792522]@0xffffff7f8bc94000
com.apple.driver.AppleACPIPlatform(6.1)[B0282791-F78C-3A3D-A829-629AD847C7EA]@0xffffff7f8da9e000->0xffffff7f8db39fff
dependency: com.apple.iokit.IOACPIFamily(1.4)[95DA39BB-7C39-3742-A2E5-86C555E21D67]@0xffffff7f8c265000
dependency: com.apple.iokit.IOPCIFamily(2.9)[AEA4C7F5-CCB0-338B-B471-CF28A9792522]@0xffffff7f8bc94000
dependency: com.apple.driver.AppleSMC(3.1.9)[2D1E4A3F-A19E-3F12-878D-807CB79CD55F]@0xffffff7f8c26e000
BSD process name corresponding to current thread: kernel_task

根据回溯信息所提供的内容,panic报告中还包含了内核扩展(Kernel Extension)以及相应的加载地址。根据其错误显示,大概能确定的内容有以下几点:
text: com.apple.driver.AppleSMC(3.1.9) -> 地址:0xffffff7f8c26e000
text:com.apple.driver.AppleACPIPlatform(6.1) ->地址:0xffffff7f8da9e000

除此之外,在Panic报告中还包含内核版本信息,电脑配置信息等等。其中的Kernel Slide信息(0x000000000b200000)是比较重要的,因为它包含了内核镜像信息以及转移到内存中的数据。

好了,我们现在可以总结一下从Panic报告中收集到的数据:
1. 内核崩溃是有一个页面错误访问内存地址0xffffff800b58776f导致的。
2. 触发页面错误的指令其地址(RIP 寄存器值)为:0xffffff7f8c7ba8b1。
3. 回溯信息中包含了com.apple.driver.AppleSMC(3.1.9)com.apple.driver.AppleACPIPlatform(6.1)这两个text。
4. Kernel Slide:0x000000000b200000

最后,我们可以将/System/Library/Kernels/kernel放进Hopper Disassembler等进行反汇编查看。此时,可以到错误访问到内存地址,记录一下指令值。然后到回溯信息中引发错误的2个text值进行查看,并将值模拟运算,发现是因为对寄存器修改出一个错误值的时候引起的。


总结

虽然我还不知道具体是如何产生这么一个错误值的,但是我觉得出现一些小bug的时候,应该自己先慢慢尝试解决,询问客服的时候,不要盲目听从客服的指令hhhh。

apple_connect

吐槽一下,客服确实是态度好,但是真的没啥用啊hhh,弄崩了之后自己也懵了😭。最后,SMC重置虽然能解决一系列问题,但是不要轻易去踩坑蛤蛤蛤。。

点击此处查看完整kernel panic报告

发表评论

电子邮件地址不会被公开。 必填项已用*标注