如何在不到一分钟的时间内解决Windows 8崩溃

乍看上去
  • Windows 8.1 System Builder OEM DVD 64位

视窗 8 has been out for a while, featuring an interface that'就像烦人一样酷。 。 。直到你掌握了它。但是,就像任何计算机操作系统一样,它可能会崩溃。幸运的是,有一种简单的方法可以解决大多数崩溃的原因。只需调用Windows调试器WinDbg;用于诊断Windows崩溃最常见原因的免费工具-行为不当的第三方驱动程序。

在W8中,对“死亡蓝屏/蓝屏死机”进行了修改,以包含一个大型的简单(表情符号和一条人类(如果不是非常有用的话)语言的短消息。 幻灯片版本 引导您度过任何崩溃。]

  视窗  8

视窗 8 蓝屏死机已成为令人沮丧的皱眉。

也, 微软 在转储文件创建和管理过程中取得了进步。虽然本文重点介绍W8,但该信息适用于RT和 服务器 2012。有关早期操作系统,请参阅 在数分钟内解决Windows 7崩溃 或者,对于XP和2000,请参见 如何在几分钟内解决Windows崩溃.

关于Windows崩溃

操作系统崩溃与 应用领域 崩溃,系统挂起或其他问题。在大多数情况下,操作系统崩溃是一种保护措施。当操作系统发现关键设备出现故障或内部操作系统状态由于可能的病毒,错误的设备驱动程序甚至RAM故障而被确定为不一致时,通常更安全的方法是立即停止。否则,继续操作将造成更严重的损害,例如应用程序数据损坏或丢失。

[帮助不断: 向Windows崩溃寻求帮助]

三分之一的系统崩溃是由第三方驱动程序在内核模式下采取不适当的操作(例如,写入不存在的内存)导致的,它们可以直接访问OS内核和硬件。

相反,在用户模式下运行的驱动程序只能间接访问OS内核,不能直接导致崩溃。一小部分的崩溃是由硬件问题(例如内存不足)引起的,更少的原因是由操作系统本身的故障引起的。有些原因是未知的。

感谢您的内存转储

内存转储是您将遇到的最丑陋的最好的朋友。它是操作系统停止时计算机系统状态的快照。并且,在转储文件包含的大量看起来不太友好的数据中,您通常只需要几个易于掌握和使用的项目。随着Windows 8的引入,该操作系统现在创建了四个不同的内存转储。完成,内核和小型转储以及新的自动内存转储。

1.自动内存转储

位置:%SystemRoot%\ Memory.dmp

大小:≈OS内核的大小

自动内存转储是安装Windows 8时选择的默认选项。它的创建是为了支持“系统管理”页面文件配置,该配置已更新为减小磁盘上页面文件的大小。 “自动内存转储”选项会生成内核内存转储,不同之处在于您选择“自动”时,它允许SMSS进程将页面文件缩小为小于RAM的大小。

2.完成内存转储

位置:%SystemRoot%\ Memory.dmp

大小:≈已安装的RAM大小加1MB

一个完整(或完整)的内存转储大约等于已安装的RAM的数量。对于具有多个GB的许多系统,这可能很快成为存储问题,尤其是在您偶尔遇到崩溃的情况下。通常,我不建议保存完整的内存转储,因为它们占用了太多空间并且通常是不需要的。但是,在某些情况下,与Microsoft(或其他供应商)合作查找导致完全内存转储非常有用的非常复杂问题的原因。因此,请坚持使用自动转储,但要准备切换设置以在极少数情况下生成完整转储。

3.内核内存转储

位置:%SystemRoot%\ Memory.dmp

大小:≈内核模式组件“拥有”的物理内存的大小

内核转储的大小大致等于Windows 8内核占用的RAM。在我的具有4GB RAM,在64位处理器上运行Windows 8的测试系统上,内核转储约为336MB。由于有时必须转储文件,因此我对其进行了压缩,从而将其压缩到80MB。内核转储的一个优点是它包含分析所需的二进制文件。自动转储设置默认情况下会创建一个内核转储文件,仅保存最新的转储文件,并为每个事件保存一个小型转储。

4.小型或小型转储

位置:%SystemRoot%\ Minidump

大小:x86上至少64K,x64上至少128k(W8测试PC上为27.9万)

小型转储包括由内存指向的内存页,这些内存页由寄存器给出故障点的值以及故障线程的堆栈。使它们变小的原因是它们不包含发生故障时内存中的任何二进制文件或可执行文件。

但是,这些文件对于调试器的后续分析至关重要。只要您在创建转储文件的计算机上进行调试,WinDbg便可以在“系统根目录”文件夹中找到它们(除非二进制文件在创建转储文件后被系统更新更改了)。另外,调试器应该能够通过Microsoft的符号文件在线存储SymServ自动找到它们。 视窗 8 为每个崩溃事件创建并保存一个小型转储,从本质上提供了系统生命周期内所有事件的历史记录。

配置W8以获取正确的内存转储

虽然W8的默认配置将操作系统设置为生成您最可能需要的内存转储格式,但是请快速查看以确保。在W8样式菜单中,只需键入“控制面板”(或在许多情况下仅输入前几个字母),它将自动神奇地带您进入“应用程序”页面,在该页面上您会看到“控制面板”周围的白框;按Enter键将带您进入该熟悉的界面。

  视窗  8

在W8中进入“控制面板”。

从控制面板开始检查Windows 8内存转储设置的路径如下:

控制面板|系统和 安全 |系统|高级系统设置|启动和恢复|设定值

在“启动和恢复”对话框中,确保已选中“自动内存转储”。您可能还希望确保同时选中“将事件写入系统日志”和“自动重启”(默认情况下也应启用)。

安装WinDbg

系统要求

要为基于WinDbg的崩溃分析设置PC,您将需要以下内容:

•32位或64位Windows 8 / R2 / 服务器 2012 / 视窗 7 / 服务器 2008

根据运行调试器的处理器,可以使用32位或64位调试工具。请注意,转储文件是在基于x86的平台还是基于x64的平台上创建的,这并不重要。

•Windows 8的Windows SDK的Windows调试工具部分,可以从Microsoft免费下载。

•大约103MB的硬盘空间(不包括转储文件或符号文件的存储空间)

•实时互联网连接

下载WinDbg

首先下载sdksetup.exe,这是一个小文件(969KB),可启动Web安装程序,从中选择要安装的组件。

标准下载。

自动下载 (下载将自行开始):

需要空间

忽略所需的1.2GB磁盘空间;您将只安装套件的一小部分。在我的测试机上,安装过程预计为256.2MB,但根据文件资源管理器的安装,仅需要103MB。

运行skdsetup.exe

将Software Development Kit(SDK)安装到将用于查看内存转储文件的计算机。

A.启动sdksetup.exe。

B.指定位置:

建议的安装路径如下:

C:\ Program Files(x86)\ 视窗 Kits \ 8.0 \

如果要下载安装在单独的计算机上,请选择第二个选项并设置适当的路径。

C.接受许可协议

D.删除所有(Windows调试工具除外)的复选标记

什么是符号,为什么我需要它们?

现在已经安装了调试器,并且在调用转储文件之前,您必须确保它可以访问符号文件。符号表是编译的副产品。编译程序时,会将源代码从高级语言转换为机器代码。同时,编译器会创建一个符号文件,其中包含标识符,标识符在程序中的位置及其属性的列表。由于程序不需要执行此信息,因此可以将其取出并存储在另一个文件中。这样可以减小最终可执行文件的大小,从而占用更少的磁盘空间并更快地加载到内存中。但是,当程序导致问题时,操作系统仅知道发生问题的十六进制地址,而不是那里的人和人在做什么。通过使用SymServe可获得的符号表可提供该信息。

SymServ(SymSrv)

  视窗  8

在Windows 8用户界面中,右键单击WinDbg,然后从屏幕底部弹出的栏中选择“以管理员身份运行”。

SymServ(也称为SymSrv)是Microsoft提供的至关重要的实用程序,它管理要检索的正确符号表的标识,以供WinDbg使用。使用调试器无需付费,只要调试器配置正确,它就可以在后台自动运行,并且可以不受限制地访问Microsoft的符号存储。

运行WinDbg

在W8 UI中,右键单击您将使用的WinDbg版本(x64或x86),然后从屏幕底部弹出的栏中选择“以管理员身份运行”。然后,您将看到一个异常令人兴奋的应用程序界面;一块灰色。在用数据填充之前,必须告诉它在哪里可以找到符号文件。

设置符号文件路径

视窗 有大量的符号表文件,因为操作系统的每个内部版本(甚至是一次性的变体)都会产生一个新文件。使用错误的符号表就像使用波士顿地图在旧金山中寻找路线。为确保使用正确的符号,请在WinDbg的菜单栏中选择以下各项:

档案|符号文件路径

在“符号搜索路径”窗口中,输入以下地址:

srv*c:\cache*http://msdl.microsoft.com/download/symbols

请注意,星号之间的地址是您想要存储符号以供将来参考的位置。例如,我将符号存储在c:驱动器根目录下的名为symbol的文件夹中,因此:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols

确保您的防火墙允许访问msdl.microsoft.com。

WinDbg如何处理符号文件

打开内存转储时,WinDbg将查看可执行文件(.exe,.dll等)并提取版本信息。然后,它会向Microsoft的SymServ创建一个请求,其中包括此版本信息,并找到精确的符号表以从中提取信息。它不会下载您要进行故障排除的特定操作系统的所有符号。它将下载所需的内容。

符号文件的空间

存储符号所需的空间各不相同。在我的W8测试机中,运行大量崩溃测试后,该文件夹约为35MB。在运行W7的另一个系统上,我在该系统上打开了来自其他几个系统的转储文件,该文件夹仍然不足100MB。请记住,如果您从其他计算机(带有操作系统的变体)中打开文件,则文件夹的大小可能会继续增加。

或者,您可以选择从Microsoft下载和存储完整的符号文件。在执行此操作之前,请注意-对于每个符号包-您至少应有1GB的可用磁盘空间。这是因为,除了存储文件所需的空间之外,您还需要用于存储所需临时文件的空间。即使这些天的硬盘成本很低,使用的空间还是值得注意的。

•每个x86符号包可能需要750 MB或更多的硬盘空间。

•每个x64符号包可能需要640 MB或更多。

除非另有说明,否则符号包是非累积性的,因此,如果您使用的是SP2 视窗 版本,则在安装SP2的符号之前,需要为原始RTM版本和SP1安装符号。

创建一个转储文件

如果没有要查看的内存转储怎么办?别担心。您可以自己创造一个。可以使用不同的方法,但是最好的方法是使用Mark Russinovich创建的名为NotMyFault的工具。

下载NotMyFault

要获取NotMyFault,请转到SysInternals的Windows Internals Book页面,然后向下滚动到Book Tools部分,您将在其中看到下载链接。该工具包括一些选项,这些选项可加载行为异常的驱动程序(需要管理特权)。下载后,我从桌面创建了一个快捷方式以简化访问。

请记住,使用NotMyFault会造成系统崩溃,尽管我从未见过使用该工具的问题,但生活中没有任何保证,尤其是在计算机中。因此,请准备您的系统,并让需要访问该系统的任何人注销几分钟。保存包含可能会丢失的信息的所有文件,然后关闭所有应用程序。经过适当的准备,计算机应该停机,重新引导,并且应该创建小型转储和内核转储。

运行NotMyFault

启动NotMyFault,然后选择高IRQL故障(内核模式)。 。 。点击崩溃按钮。一秒钟就会出现您的沮丧情绪,一个小型转储文件和一个内核转储文件将被保存,并且-如果配置正确-系统将重新启动。

  视窗  8

视窗 8 崩溃时,您会在新的BSOD中看到(1)皱眉。重新启动后,您会看到(2)将崩溃文件发送给Microsoft的报价。最后一个屏幕(3)列出了将要发送的文件,显示了隐私声明,并询问您是否允许发送文件。

在W8 UI上将显示一条蓝色带,并显示“您的PC出现问题……”的消息。如果单击“发送详细信息”按钮,Microsoft将使用WinDbg和命令“!analyze”作为自动服务的一部分,以识别问题的根本原因。输出与已知驱动程序错误修复程序的数据库组合在一起,以帮助识别故障。

启动WinDbg并(通常)查看崩溃原因

通过从W8 UI右键单击来启动WinDbg,然后从屏幕底部弹出的栏中选择“以管理员身份运行”。调试器运行后,选择菜单选项

档案|打开故障转储

并指向它以打开要分析的转储文件。请注意,WinDbg将打开任何大小的转储文件。一个小型转储,内核转储或完整的转储文件。当提供“保存工作区信息”时,请说“是”。它会记住转储文件在哪里。

将打开一个命令窗口。如果这是您第一次在此系统上使用WinDbg或从以前从未加载过文件的另一个系统查看转储文件,则可能需要一些时间来填写信息。这是因为调试器必须确定Windows的确切版本,然后转到Microsoft的SymServ并找到相应的符号文件并下载所需的符号文件。在随后的会话中,由于符号已保存在硬盘驱动器上,因此不需要此步骤。 WinDbg获得所需的符号后,它将运行分析并在窗口中填充结果。这将包括基本信息,例如WinDbg的版本,打开的转储文件的位置和名称,正在使用的符号搜索路径,甚至是简短的分析产品(在这种情况下,

可能是由于:myfault.sys

当然,我们知道这是正确的(myfault.sys是NotMyFault的驱动程序名称)。

WinDbg错误消息

如果WinDbg报告***警告或***错误,则解决方法通常很简单。以下列出了常见消息,它们的含义以及如何解决它们。

***警告:无法验证ntoskrnl.exe的时间戳

***错误:模块加载已完成,但无法为ntoskrnl.exe加载符号

这个很重要。当您在WinDbg输出的开头附近看到这两条消息时,这意味着您将无法获得所需的分析。自动运行“ Bugcheck 分析 ”并确认消息后确认

*****内核符号不正确。请修正符号以进行分析

被陈列。

可能的原因如下:

•无路径/错误路径;尚未设置符号文件的路径或该路径不正确(查找拼写错误,例如空白)。检查符号路径。

•连接失败;检查您的Internet连接以确保其正常运行。

•访问被阻止;防火墙阻止了对符号文件的访问,或者文件在检索过程中被损坏。看到没有防火墙阻止对msdl.microsoft.com的访问(它可能仅允许访问www.microsoft.com)。

请注意,如果防火墙最初阻止WinDbg下载符号表,则可能导致文件损坏。如果解除阻止防火墙并尝试再次下载符号文件不起作用,请执行以下操作:文件仍然损坏。最快的解决方法是关闭WinDbg,删除Symbols文件夹(很可能在c:\ symbols中设置),然后解除对防火墙的阻止。接下来,重新打开WinDbg和转储文件。调试器将重新创建文件夹并重新下载符号。

在纠正此问题之前,请不要进一步分析。

如果看到以下错误,请不要担心:

***警告:无法验证myfault.sys的时间戳

***错误:模块加载已完成,但无法为myfault.sys加载符号

  视窗  8

WinDbg会自动提示罪魁祸首,如图所示。

这意味着调试器正在寻找有关myfault.sys的信息。但是,由于它是第三方驱动程序,因此没有符号,因为Microsoft不会存储所有第三方驱动程序。关键是您可以忽略此错误消息。供应商通常不向驱动程序提供符号文件,并且它们对您的工作不是必需的;您可以在没有它们的情况下查明问题驱动程序。

那么,是什么原因导致飞机坠毁?

如上所述,当您使用WinDbg打开转储文件时,它会自动运行基本分析,而该分析通常会使罪魁祸首,甚至没有向调试器提供任何直接命令,如屏幕上显示“可能是:myfault.sys引起的”所示。

更多信息

获得有关崩溃事件和可疑模块的更多信息很容易。通常,您只需要强大的调试器提供的数百个命令中的两个命令即可:

!分析-v

lmvm。

命令WinDbg的新方法

通常,您将键入所需的命令和参数。事情已经变了,但是Windows也变了。如果您仔细查看WinDbg界面,在“ Bugcheck 分析 ”框的下面,它会显示“使用!analyze -v获取详细的调试信息”,并且该命令带有下划线并为蓝色。是的,这是一个链接。只需触摸它,命令就会为您运行。但是,如果您没有触摸屏,则可以使用鼠标正常工作,也可以采用传统的在界面底部的窗口中键入命令的传统方法,在该窗口中您会看到提示“ kd>“(代表“内核调试器”。)请务必精确执行;这是语法为关键的情况。例如,请注意命令与“ -v”之间的空格。“ v”或详细开关告诉WinDbg您需要所有详细信息,也可以在看到myfault链接的位置进行相同操作,该链接将显示可疑驱动程序的元数据。

!analyze -v的输出

!analyze -v提供的分析是英语和程序员的结合,但这仍然是一个不错的开始。实际上,在许多情况下,您将不需要进一步。如果您知道崩溃的原因,则可能已经完成。

!analyze -v的输出

  视窗  8

!analyze -v命令显示崩溃的原因和可能的罪魁祸首。

!analyze -v提供有关系统崩溃的更多详细信息。在这种情况下,它准确地描述了指示测试驱动程序(myfault.sys)的操作;以太高的中断级别访问地址。

分析

DRIVER_IRQL_NOT_LESS_OR_EQUAL(d1)

试图以太高的中断请求级别(IRQL)访问可分页(或完全无效)的地址。这通常是由驱动程序使用不正确的地址引起的。

在“调试详细信息”下,该报告建议该问题是“ WIN_8_DRIVER_FAULT”,并且NotMyFault.exe是活动的。

堆栈转储

使用!analyze -v调试器的输出的一个重要功能是堆栈文本。每当查看转储文件时,请始终在堆栈的最右端查找任何第三方驱动程序。在这种情况下,我们将看到myfault。请注意,事件的时间顺序是从下到上。由于每个新任务都是由系统执行的,因此它会显示在顶部。在这个相当短的堆栈中,您可以看到myfault处于活动状态,然后发生页面错误,并且系统声明了BugCheck,这是系统停止运行的时间(蓝屏)。

一种看待这种情况的方法是,当系统崩溃时,当您看到第三方驱动程序在堆栈上处于活动状态时,这就像走进一个房间并在地板上找到一个尸体,而有人拿着烟枪站在它上面手;这并不意味着他有罪,而是让他怀疑第一名。

lmvm的输出(或通过选择myfault)

仅知道犯罪嫌疑人的名字是不够的。您需要知道他的住处以及他的工作。这就是lmvm的来源。它提供了从该映像路径(并非所有驱动程序都位于%systemroot%\ system32 \ drivers中),时间戳,映像大小和文件类型(在此情况下为驱动程序)到公司的一系列数据。制造商,其所属的产品,版本号和说明。一些公司甚至包括联系信息以获取技术支持。但是,调试器报告的内容仅取决于开发人员所包含的内容,在某些情况下,所包含的内容很少。

找到供应商的名称后,请访问其网站并检查更新,知识库文章和其他支持信息。如果此类物品不存在或无法解决问题,请与他们联系。他们可能会要求您发送调试信息(很容易将调试器的输出复制到电子邮件或Word文档中),或者可能会要求您将内存转储发送给他们(首先将其压缩,然后进行压缩)并保护数据完整性)。

如果您对WinDbg的使用有任何疑问,请查看WinDbg帮助文件。太好了并且,在阅读命令时,请务必查看提供的有关许多参数的信息,例如“ -v”,它返回更多(详细)信息。

其他三分之一

确实,按照上述说明进行操作,您可能会立即知道三分之二的崩溃的原因;确实让那烦人的其他三分之一。那你怎么办呢?好吧,列出可能导致系统故障的清单并不短;它的范围从风扇故障导致系统过热的情况到坏的内存。

有时候是硬件

如果您反复发生崩溃,但没有明确或一致的原因,则可能是内存问题。 视窗 内存诊断工具和Memtest86是检查内存的两种好方法。转到“控制面板”,然后在其搜索框中输入“内存”,然后选择“诊断计算机的内存问题”。

这个简单的诊断工具快速有效。许多人不愿考虑出现内存问题的可能性,因为它们只占系统崩溃的很小一部分。但是,它们通常是让您猜测最长的原因。

视窗 是罪魁祸首吗?

很可能不会。对于所有很快将此类事件归咎于雷德蒙德的反对者而言,事实是Windows很少是导致系统故障的原因。但是,如果将ntoskrnl.exe(Windows核心)或win32.sys(对Windows上的“ GUI”层最负责的驱动程序)命名为罪魁祸首(而且通常是这样),则不要太快接受它。某些错误的第三方设备驱动程序很有可能会调用Windows组件来执行操作并传递了错误的指令,例如告诉它写入不存在的内存。因此,虽然操作系统肯定会出错,但在您怪罪Microsoft之前,请先排除所有其他可能性。

那我的防病毒驱动程序呢?

通常,您可能会看到一个名为“罪魁祸首”的防病毒驱动程序,但是很有可能没有罪恶感。原因如下:为了使防病毒代码正常工作,它必须监视所有文件的打开和关闭。为了做到这一点,代码位于操作系统的较低层,并且一直在工作,因此他经常会出现崩溃时处于活动状态的函数调用堆栈。

缺少供应商信息?

一些驱动程序供应商不花时间在其模块中包含足够的信息。因此,如果lmvm无法解决问题,请尝试查看映像路径上的子目录(如果有的话)。通常,其中之一将是供应商名称或其缩写。另一种选择是搜索Google。输入驱动程序名称和/或文件夹名称。您可能会找到供应商以及发布了有关驱动程序信息的其他供应商。

概要

请记住,阅读本入门手册并在系统上配置WinDbg所花费的时间要比解决三个崩溃中的两个要花费的时间多得多。实际上,大多数崩溃分析工作将花费您不到一分钟的时间。而且,尽管其他三分之一肯定会更具挑战性,但至少您将有更多时间尝试。

Smith是Alexander LAN Inc.的总裁,Alexander LAN Inc.是一名自由顾问和IT作家。可以通过以下方式联系到他 [email protected].

乍看上去
  • Windows 8.1 System Builder OEM DVD 64位

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Page 1
第1页,共20页