如何在一分钟内解决Windows 8崩溃问题

1.2.3.4.5.6.7.8.91011121314151617181920 第12页
第12页,共20页

窗户8已经推出一段时间了,它的界面既酷又烦人。直到你掌握了窍门。但是,就像任何计算机操作系统一样,它也可能崩溃。幸运的是,有一种简单的方法可以解决大多数车祸的原因;只需调用WinDbg,Windows调试器;一个诊断Windows崩溃最常见原因的免费工具——行为不端的第三方驱动程序。

在W8中,死亡/BSOD的蓝屏被修改为包含一个大的、简单的:(表情符号)和一条人类语言的短消息(如果不是非常有用的话)幻灯片版它能帮你度过任何难关。

视窗8

Windows8蓝屏上的死亡已经成为沮丧的皱眉。

还,微软在转储文件创建和管理过程中取得了进步服务器2012。有关早期操作系统,请参阅在几分钟内解决Windows 7崩溃问题或者,对于XP和2000,请参见如何在几分钟内解决Windows崩溃.

关于Windows崩溃

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

[正在寻求帮助:在哪里寻求Windows崩溃的帮助]

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

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

谢谢你的内存转储

内存转储是你所拥有的最丑陋的最好的朋友。它是操作系统停止时计算机系统状态的快照。而且,转储文件包含大量看起来不太友好的数据,你通常只需要几个易于掌握和使用的项。随着Windows 8操作系统现在创建四种不同的内存转储:完整转储、内核转储和小型转储,以及新的自动内存转储。

1.自动内存转储

位置:%SystemRoot%\Memory.dmp

Size:≈操作系统内核大小

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

2.完全内存转储

位置:%SystemRoot%\Memory.dmp

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

一个完整的(或完整的)内存转储大约等于安装的RAM的数量。由于许多系统具有多个gb,这可能很快成为一个存储问题,特别是如果您遇到的不仅仅是偶尔的崩溃。通常,我不建议保存完整的内存转储,因为它们占用太多空间,通常是不需要的。然而,在与Microsoft(或其他供应商)合作查找非常复杂问题的原因时,完整的内存转储将非常有帮助。因此,坚持使用自动转储,但要准备在少数情况下切换设置以生成完整转储。

3.内核内存转储

位置:%SystemRoot%\Memory.dmp

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

内核转储大致相等为Windows 8内核占用的RAM。在我的测试系统上,在64位处理器上运行Windows 8的Windows 8,内核转储约为336MB。由于,只要偶尔,必须运输转储文件,我压缩它,使其降至80MB。内核转储的一个优点是它包含分析所需的二进制文件。自动转储设置默认创建内核转储文件,仅保存最近的,以及每个事件的MiniDump。

4.小或迷你倾销

地点:% SystemRoot % \ Minidump

尺寸:x86上至少64K,x64上至少128k(W8测试PC上为279K)

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

但是,这些文件对于调试器的后续分析是非常重要的。只要您在创建转储文件的机器上进行调试,WinDbg就可以在System Root文件夹中找到它们(除非在创建转储文件之后通过系统更新更改了二进制文件)。此外,调试器应该能够通过SymServ自动定位它们,SymServ是微软的在线符号文件存储。Windows 8为每个崩溃事件创建并保存一个最小的转储,本质上提供了系统生命周期中所有事件的历史记录。

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

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

视窗8

让你的方式控制面板在W8。

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

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

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

安装WinDbg

系统要求

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

•32位或64位Windows 8/R2/Server 2012/Windows 7/Server 2008

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

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

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

•实时互联网连接

下载WinDbg

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

标准下载。

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

所需空间

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

运行skdsetup.exe

将软件开发工具包(SDK)安装到将用于查看内存转储文件的计算机上。

答:sdksetup.exe发射。

B.指定地点:

建议的安装路径如下所示:

C:\ Program Files(x86)\ Windows套件\ 8.0 \

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

C.接受许可协议

除去除Windows调试工具以外的所有检查标记

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

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

SymServ(SymSrv)

视窗8

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

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

运行WinDbg

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

设置符号文件路径

Windows有大量的符号表文件,因为操作系统的每一次构建,甚至是一次性的变体,都会产生一个新文件。使用错误的符号表就像通过波士顿地图找到旧金山的方式。为确保使用的符号正确,请在WinDbg的菜单栏上选择以下内容:

文件|符号文件路径

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

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

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

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

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

WinDbg如何处理符号文件

打开内存转储时,WindBG会查看可执行文件(.exe,.dll等)并提取版本信息。它然后,在Microsoft创建对Symserv的请求,其中包括此版本信息,并找到精确的符号表以绘制信息。它不会下载故障排除的特定操作系统的所有符号;它会下载它需要的东西。

符号文件的空间

存储符号所需的空间各不相同。在我的W8测试机中,在运行了大量崩溃测试之后,文件夹大约为35MB。在另一个运行W7的系统上,我打开了其他几个系统的转储文件,但文件夹仍然低于100MB。请记住,如果您从其他机器(使用不同的操作系统)打开文件,您的文件夹可能会继续增大。

或者,您可以选择从Microsoft下载并存储完整的symbol文件。在此之前,请注意,对于每个symbol软件包,您应该至少有1GB的可用磁盘空间。这是因为,除了存储文件所需的空间外,您还需要存储所需临时文件的空间。即使硬盘成本较低在这些日子里,使用的空间是值得注意的。

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

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

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

创建一个转储文件

如果没有内存转储可查看怎么办?不用担心。你可以自己生成一个。有不同的方法可以做到这一点,但最好的方法是使用Mark Russinovich创建的NotMyFault工具。

下载NotMyFault

要获取NotMyFault,请转到SysInternals上的Windows Internals书籍页面,并向下滚动到Book Tools部分,在那里您将看到下载链接。该工具包括一系列选项,用于加载行为不端的驱动程序(需要管理权限)。下载后,我从桌面创建了一个快捷方式,以简化访问。

请记住,使用NotmyFault将创建系统崩溃,而我从未见过使用该工具的问题,生活中没有保证,特别是在计算机上。因此,准备您的系统,并有任何需要访问它的人几分钟。保存包含可能丢失并关闭所有应用程序的信息的文件。正确准备,机器应该下降,重新启动,都应该创建MinIDump和MinIDump和内核转储。

运行不是我的错

启动NotMyFault并选择High IRQL fault(内核模式),然后…点击崩溃按钮。您的沮丧表情将在一秒钟内出现,小型转储和内核转储文件都将被保存,如果配置正确,系统将重新启动。

视窗8

当Windows 8崩溃时,您会看到(1)新BSOD中的令人沮丧。重新启动后,您会看到(2)要将崩溃文件发送到Microsoft的要约。最终屏幕(3)列出将要发送的文件,显示隐私声明并要求您发送发送它们的权限。

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

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

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

文件|打开崩溃转储

并指向它以打开要分析的转储文件。请注意,WinDbg将打开任何大小的转储文件;小型转储、内核转储或完整转储文件。当提供保存工作区信息时,说是;它将记住转储文件的位置。

命令窗口将打开。如果这是第一次使用此系统上的WindBG或从另一个系统查看转储文件之前,您之前没有加载文件,则可能需要填写信息的时刻。这是因为调试器必须识别Windows的精确版本,然后在Microsoft转到Symserv,并找到相应的符号文件并下载所需的符号文件。在后续会话中,不需要此步骤,因为符号保存在硬盘驱动器上。一旦WindBG具有所需的符号,它将运行分析并使用结果填充窗口。这将包括诸如WindBG的版本之类的基本信息,转储文件的位置和名称打开,符号搜索路径正在使用甚至简要分析,在这种情况下,

可能由以下原因引起:myfault.sys

当然,我们知道是真的(myfault.sys是notmyfault的驱动程序的名称)。

WinDbg错误消息

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

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

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

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

*****内核符号错误。请修正符号进行分析

显示。

可能的原因如下:

•没有路径/错误的路径;没有设置符号文件的路径,或者路径不正确(查找输入错误,如空白)。检查符号路径。

•连接失败;检查你的互联网连接,确保它正常工作。

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

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

在纠正之前,不要进一步进行分析。

如果您看到以下错误,无需担心:

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

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

视窗8

WinDbg会自动提示如下所示的罪魁祸首。

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

那么,是什么导致了这次坠机?

如上所述,当您使用WindBG打开转储文件时,它会自动运行一个基本分析,这些分析通常会使罪魁祸首持续无,甚至不会给调试器都提供任何直接命令,如屏幕所示,它说“可能是由:myfault.sys导致的:myfault.sys”。

更多信息

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

分析- v !

lmvm。

命令WinDbg的一种新方法

通常,您将键入所需的命令和参数。然而,事情也有改变了。如果您仔细查看WindBG接口,就在“错误检查分析”框下方,它说“使用!分析-V以获取详细的调试信息”,并且该命令下划线并以蓝色为单位。是的,这是一个链接。只需触摸它,命令将为您运行。但是,如果您没有触摸屏,鼠标将正常工作或诉诸传统方法,以将命令键入窗口的窗口,从而看到提示“kd>”(它代表“内核调试器”)。一定要准确地进行;这是语法是键的情况。例如,请注意命令和“-v”之间的空格。 The "v" or verbose switch tells WinDbg that you want all the details. You can do the same where you see the link for myfault which will display metadata for the suspect driver.

输出来自!分析-v

由!analyze -v提供的分析是英语和程序员语言的结合,但它仍然是一个很好的开始。事实上,在很多情况下,你不需要再往前走了。如果你知道坠机的原因,你可能就完了。

输出来自!分析-v

视窗8

The!Analyze -V命令揭示了崩溃的原因和可能的罪魁祸首。

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

分析

驱动程序不小于或等于(d1)

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

在“调试详细信息”下,报告表明问题是“WIN_8_DRIVER_故障”,NotMyFault.exe处于活动状态。

堆栈转储

使用!analyze -v调试器输出的一个重要特性是堆栈文本。无论何时查看转储文件,都要查看堆栈中任何第三方驱动程序的最右侧。在这种情况下,我们就会看出是我的错了。请注意,事件的时间顺序是从底部到顶部的;当系统执行每个新任务时,它会显示在顶部。在这个相当短的堆栈中,您可以看到myfault是活动的,然后发生了一个页面错误,系统声明了一个BugCheck,这是系统停止的时候(Blue screen)。

一种方法是,当系统崩溃时,当你看到一个第三方驱动程序活跃在堆栈上时,就像走进一个房间,发现地板上有一具尸体,有人站在上面,手里拿着一把冒烟的枪;这并不意味着他有罪,而是让他怀疑是头号人物。

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

仅仅知道嫌疑人的姓名是不够的;你需要知道他住在哪里,做什么。这就是lmvm的用武之地。它提供了一系列数据,这些数据来自于该映像路径(并非所有驱动程序都位于%systemroot%\system32\drivers.)中)、时间戳、映像大小和文件类型(在本例中为驱动程序)以及制作该映像的公司、它所属的产品、版本号和说明。一些公司甚至提供技术支持的联系信息。然而,调试器报告的内容完全取决于开发人员包含的内容,在某些情况下,这一点非常少。

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

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

另三分之一

虽然按照上面的说明,你可能会立刻知道三分之二崩溃的原因;剩下那烦人的三分之一了。你会怎么做?可能导致系统故障的原因并不少;它的范围可以从风扇故障,导致系统过热,到糟糕的内存。

有时是硬件问题

如果您有重复崩溃但没有明确或一致的原因,它可能是一个记忆问题。检查内存的两个好方法是Windows Memory诊断工具和Memtest86。转到控制面板并进入“内存”进入其搜索框,然后选择“诊断计算机的内存问题”。

这个简单的诊断工具速度快,效果好。许多人都不太相信内存问题的可能性,因为它们只占系统崩溃的一小部分。然而,它们往往是让你猜测时间最长的原因。

Windows是罪魁祸首吗?

很有可能:不是。对于那些很快将此类事件归咎于雷蒙德的反对者来说,事实是Windows很少是系统故障的原因。但是,如果ntoskrnl.exe(Windows core)或win32.sys(Windows上最负责“GUI”层的驱动程序)被认为是罪魁祸首——它们通常都是——不要太快接受它。更有可能的情况是,某个错误的第三方设备驱动程序调用Windows组件执行操作,并传递了错误的指令,例如告诉它写入不存在的内存。因此,虽然操作系统肯定会出错,但在你责怪微软之前,要尽一切可能。

我的防病毒驱动程序呢?

通常,您可能会看到一个防病毒驱动程序被称为罪魁祸首,但它很有可能是无罪的。这就是为什么:为了防病毒代码工作,它必须监视所有文件的打开和关闭。为了实现这一点,代码位于操作系统的底层,并且一直在工作,因此当崩溃发生时,他将经常处于处于活动状态的函数调用堆栈中。

缺少供应商信息?

一些驱动程序供应商没有花时间在其模块中包含足够的信息。因此,如果lmvm没有帮助,请尝试查看映像路径上的子目录(如果有)。其中一个通常是供应商名称或其缩写。另一个选项是搜索谷歌。键入驱动程序名称和/或文件夹名称。您可能会找到供应商以及发布驱动程序信息的其他人。

总结

请记住,阅读本入门和在系统上配置WinDbg所需的时间远远超过解决三次崩溃中的两次。事实上,大多数崩溃分析工作所需的时间都不到一分钟。尽管其他第三次可能更具挑战性,但至少您有更多的时间来尝试。

史密斯是亚历山大·兰公司(Alexander LAN Inc.)的总裁,该公司是IT行业的自由职业顾问和作家。可以和他联系dirkadsmith@gmail.com..

一瞥
  • Windows 8.1 System Builder OEM DVD 64位

1.2.3.4.5.6.7.8.91011121314151617181920 第12页
第12页,共20页
SD-WAN买家指南:向供应商(和您自己)提出的关键问题