备注
如果我们不具备使用 Windows 调试器的能力要解决此问题,我们应该使用一些基本的故障排除技术:
- 检查事件查看器中的系统日志以获取可能有助于识别导致错误检查 0x7E 的设备或者驱动程序的其他错误消息。
- 如果在错误检查消息中识别出驱动程序,请禁用该驱动程序或者与制造商联系以获取驱动程序更新。
- 请与硬件供应商联系以获取任何 ACPI 或者其他固件更新。硬件问题,例如系统不兼容、内存冲突和 IRQ 冲突,也会产生此错误。
- 我们还可以禁用 BIOS 的内存缓存/阴影以尝试解决错误。还要运行系统制造商提供的硬件诊断程序。
- 确认安装的任何新硬件都与安装的 Windows 版本兼容。例如,我们可以在 Windows 10 规范中获取有关所需硬件的信息。
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 错误检查的值为 0x0000007E。
此错误检查表明系统线程生成了错误处理程序未捕获的异常。
解决方法
如果我们计划调试此问题,则异常地址(参数 2)应标识导致此问题的驱动程序或者函数。
如果错误检查消息中按名称列出了驱动程序,请禁用或者删除该驱动程序。
如果问题缩小到单个驱动程序,请在代码中设置断点和单步执行以定位故障并深入了解导致崩溃的事件。
!analyze 调试器扩展显示有关错误检查的信息,有助于确定根本原因。
详细步骤查看我们的教程 在windows 中使用WinDBG 调试dmp文件
可以使用 !thread 扩展名以及 dds 、 dps 和 dqs (显示单词和符号)命令进行其他分析。
当 WinDbg 报告“可能由 :ntkrnlmp.exe 引起”时,这可能是一种合理的技术。
如果出现异常代码 0x80000003,则表示命中了硬编码断点或者断言,但系统是使用 /NODEBUG 开关启动的。
这个问题不应该经常发生。
如果它重复发生,请确保已连接内核调试器,并且系统已使用 /DEBUG 开关启动。
如果出现异常代码 0x80000002,陷阱帧会提供添加信息。
有关 WinDbg 和 !analyze 的更多信息,请参阅以下主题:
- 使用 WinDbg 分析故障转储文件 使用 WinDbg
- 分析内核模式转储文件
- 使用 !analyze 扩展名和 !analyze
原因
此错误检查表明系统线程生成了错误处理程序未捕获的异常。
要解释它,我们必须确定生成了哪个异常。
常见异常代码包括以下内容:
- 0x80000002:STATUS_DATATYPE_MISALIGNMENT 表示遇到未对齐的数据引用。
- 0x80000003:STATUS_BREAKPOINT 表示当没有内核调试器连接到系统时遇到断点或者断言。
- 0xC0000005:STATUS_ACCESS_VIOLATION 表示发生了内存访问冲突。
有关异常代码的完整列表,请参阅 NTSTATUS 值。
异常代码在 ntstatus.h 中定义,ntstatus.h 是 Windows 驱动程序工具包提供的头文件。
(有关详细信息,请参阅 Windows 驱动程序工具包中的头文件)。
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 参数
参数 | 说明 |
---|---|
1 | 未处理的异常代码。 |
2 | 发生异常的地址。 |
3 | 异常记录的地址。 |
4 | 上下文记录的地址。 |