调试
始终以带有详细 -v 选项的 !analyze 扩展开头。
检查输出和故障代码。
如果存在多个转储,请查找重新出现的趋势。
如果 !analyze 不够用,请使用 kv(显示堆栈回溯)调试器命令。
- 如果 kv 显示 taskGate ,请在冒号前的部分使用 .tss(显示任务状态段)命令。
- 如果 kv 显示陷阱帧,请使用 .trap(显示陷阱帧)命令来格式化帧。
- 否则,在适当的帧上使用 .trap(显示陷阱帧)命令。
(在基于 x86 的平台上,此框架与过程 NT!KiTrap 相关联。)
使用这些命令之一后,再次使用 kv 显示新堆栈。
原因
错误检查 0x7F 通常在我们安装有故障或者不匹配的硬件(尤其是内存)或者安装的硬件出现故障后发生。
当内核堆栈溢出时,可能会发生双重错误。
如果多个驱动程序连接到同一个堆栈,就会发生这种溢出。
例如,如果两个文件系统过滤器驱动程序连接到同一个堆栈,然后文件系统递归返回,则堆栈溢出。
故障排除
硬件
如果我们最近向计算机添加了硬件,请将其移除以查看错误是否再次出现。
如果现有硬件出现故障,请移除或者更换故障组件。
运行系统制造商提供的硬件诊断程序以确定哪个硬件组件发生故障。
错误或者不匹配的内存可能会导致此错误检查。
使用 Windows 中的内存诊断程序来测试所有系统内存。
确认所有硬盘驱动器、硬盘控制器与安装的 Windows 版本兼容。
系统主板也有可能存在问题,例如划痕痕迹或者有缺陷的组件。
电源故障也会导致问题。
超频(将 CPU 设置为以高于额定规格的速度运行)可能导致此错误。
如果我们对出现错误的计算机进行了超频,请将 CPU 恢复到默认时钟速度设置。
如果该选项可用,我们还可以禁用 BIOS 的内存缓存以尝试解决问题。
软件
检查事件查看器中的系统日志以获取可能有助于识别导致错误的设备或者驱动程序的其他错误消息。
检查来自硬件制造商的 ACPI/BIOS、硬盘驱动程序控制器或者网卡的更新的可用性。
如果在安装新的或者更新的设备驱动程序后出现错误,我们应该删除或者更换驱动程序。
如果在这种情况下,在启动过程中出现错误,我们或者许可以使用安全模式重命名或者删除有问题的驱动程序。
如果驱动程序在安全模式下用作系统启动过程的一部分,则必须使用故障恢复控制台启动计算机才能访问该文件。
我们可能想尝试最后一次正确的配置选项。
当我们一次只添加一个驱动程序或者服务时,此选项最有效。
如果我们在升级到新版本的 Windows 操作系统时遇到此错误,则该错误可能是由与新版本不兼容的设备驱动程序、系统服务、病毒扫描程序或者备份工具引起的。
如果可能,请在升级前删除所有第三方设备驱动程序和系统服务并禁用任何病毒扫描程序。
请联系软件制造商以获取这些工具的更新。
还要确保我们已安装最新的 Windows 更新。
参数 1
出现在蓝屏上的第一个参数指定陷阱编号。
最常见的陷阱代码包括:
参数 | 陷阱代码 | 描述 |
---|---|---|
0x00000000 | 除以零误差 | 表示执行了一条 DIV 指令,除数为零。内存损坏、其他硬件问题或者软件故障都可能导致此错误。 |
0x00000004 | 溢出 | 在设置溢出 (OF) 标志时处理器执行对中断处理程序的调用时发生。 |
0x00000005 | 边界检查错误 | 表示处理器在执行 BOUND 指令时发现操作数超出了指定的限制。 BOUND 指令确保带符号的数组索引在特定范围内。 |
0x00000006 | 无效的操作码 | 表示处理器尝试执行无效指令。当指令指针损坏并指向错误位置时,通常会发生此错误。此错误的最常见原因是硬件内存损坏。 |
0x00000008 | 双误 | 指示在调用先前异常的处理程序期间发生异常。通常,这两个异常是串行处理的。但是,有几个异常不能串行处理,在这种情况下,处理器发出双重故障信号。 Double Fault 的常见原因有两个: 1. 内核堆栈溢出。当保护页被命中并且内核试图推送一个陷阱帧时,就会发生这种溢出。由于没有剩余堆栈,导致堆栈溢出,从而导致双重故障。如果我们认为发生了这种情况,请使用 !thread 确定堆栈限制,然后使用带有大参数(例如 kb 100)的 kb(显示堆栈回溯)来显示完整堆栈。 2. 另一个常见原因是硬件问题。 |
不太常见的陷阱代码包括以下内容:
- 0x00000001 -- 系统调试器调用
- 0x00000003 -- 调试器断点
- 0x00000007 -- 没有协处理器的硬件协处理器指令
- 0x0000000A -- 损坏的任务状态段
- 0x0000000B -- 访问不存在的内存段
- 0x0000000C -- 超出堆栈限制的内存访问
- 0x0000000D -- 其他异常未涵盖的异常;与应用程序访问冲突有关的保护错误
有关其他陷阱编号,请参阅我们要进行故障排除的处理器的 Intel 处理器体系结构手册。
UNEXPECTED_KERNEL_MODE_TRAP 参数
UNEXPECTED_KERNEL_MODE_TRAP 错误检查的值为 0x0000007F。
此错误检查表明 Intel CPU 生成了一个陷阱,而内核未能捕获此陷阱。
这个陷阱可能是一个绑定陷阱(一个不允许内核捕捉的陷阱)或者一个双重错误(在处理早期错误时发生的错误,它总是导致系统故障)。