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

123.4567891011121314151617181920. 16页
第16页,共20页

窗户8已经出来了一段时间,具有一个界面,酷,因为它是烦人的…直到你找到窍门。但是,就像任何电脑操作系统一样,它也会崩溃。幸运的是,有一种简单的方法可以解决大多数崩溃的原因;只要调用WinDbg, Windows调试器;一个免费的工具,用于诊断Windows崩溃的最常见原因——行为不当的第三方驱动程序。

在W8中,蓝屏死机/蓝屏已被修改为包括一个大的,简单的:(表情符号和短消息(如果不是非常有用的)人类语言。(看幻灯片的版本这贯穿了任何崩溃。]

Windows 8

Windows 8蓝屏死机已经成为沮丧的皱眉。

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

对Windows崩溃

操作系统崩溃与应用程序崩溃,系统挂起或其他问题。在大多数情况下,操作系统崩溃为保护措施。当操作系统发现关键设备失败或内部操作系统状态被识别为因可能的病毒,错误的设备驱动程序甚至RAM故障而被识别为不一致,它通常更安全地停止。否则,持续的操作将允许更严重的损害,例如申请数据损坏或损失。

[帮助正在路上:在Windows崩溃时,该去哪里寻求帮助

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

相比之下,在用户模式下运行的驱动程序,只能间接访问OS内核,不能直接导致崩溃。小百分比崩溃是由诸如错误的内存等硬件问题引起的,甚至在OS本身中的故障较少。一些原因是简单的未知。

谢谢你的记忆转储

记忆转储器是你有生以来最丑的好朋友。它是操作系统停止时计算机系统状态的快照。而且,在转储文件中包含的大量看起来不太友好的数据中,您通常只需要一些易于掌握和使用的项。随着Windows 8的引入,操作系统现在创建了四种不同的内存转储;Complete, Kernel, and Minidumps和新的自动内存转储。

1.自动内存转储

位置:%systemroot%\ memory.dmp

尺寸:≈OS内核的≈User

“自动内存转储”是安装Windows 8时的默认选项。创建它是为了支持“System Managed”页面文件配置,该配置已更新以减少磁盘上的页面文件大小。自动内存转储选项产生一个内核内存转储,不同之处在于当您选择Automatic时,它允许SMSS进程将页面文件减少到小于RAM的大小。

2.完成内存转储

位置:%systemroot%\ memory.dmp

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

完整(或完整的)内存转储大约等于安装的RAM量。对于许多具有多个GB的系统,这可以快速成为存储问题,特别是如果您有多于偶尔的崩溃。通常,我不建议拯救一个完整的内存转储,因为它们采用了这么多的空间,通常是不需要的。但是,在使用Microsoft(或其他供应商)时存在案例以找到一个非常复杂的问题的原因,即完整内存转储是非常有帮助的。因此,坚持自动转储,但准备好切换设置以在罕见场合生成完整的转储。

3.内核内存转储

位置:%systemroot%\ memory.dmp

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

内核转储的大小与Windows 8内核占用的RAM大小大致相同。在我的测试系统中,在64位处理器上运行Windows 8,内存为4GB,内核转储约为336MB。由于有时需要传输转储文件,所以我压缩了它,将其压缩到80MB。内核转储的一个优点是它包含分析所需的二进制文件。默认情况下,自动转储设置创建内核转储文件,仅保存最近的转储文件,以及每个事件的最小转储文件。

4.小型或minidump

位置:%Systemroot%\ miniDump

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

最小转储包括寄存器在错误点给出它们的值时指向它们的内存页,以及错误线程的堆栈。它们之所以小,是因为它们不包含任何在故障发生时存储在内存中的二进制文件或可执行文件。

但是,这些文件对调试器的后续分析至关重要。只要您在创建转储文件的机器上调试,WindBG就可以在系统根文件夹中找到它们(除非在创建转储文件后系统更新,否则二进制文件)。或者,调试器应该能够通过Symserv,Microsoft的符号文件的在线存储自动定位它们。Windows 8为每次碰撞事件创建并保存MiniDump,基本上为系统生命中的所有事件提供了历史记录。

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

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

Windows 8

通过W8中的控制面板进行控制。

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

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

一旦在启动和恢复对话框,确保“自动内存转储”被选中。您可能还想确保“将事件写入系统日志”和“自动重启”(默认情况下也应该是开启的)都被选中了。

安装windbg.

系统要求

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

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

根据您运行调试器的处理器,您可以使用32位或64位调试工具。请注意,是否在基于X86或基于X64的平台上进行了转储文件并不重要。

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

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

•实时互联网连接

下载WinDbg

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

标准下载。

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

需要空间

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

运行skdsetup.exe.

在您将用来查看内存转储文件的机器上安装软件开发工具包(SDK)。

A.启动Sdksetup.exe。

b .指定地点:

建议安装路径如下:

C:\Program Files (x86)\Windows Kits\8.0\

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

C.接受许可协议

D.删除所有但是Windows调试工具的复选标记

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

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

SymServ (SymSrv)

Windows 8

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

SymServ(也拼作SymSrv)是微软提供的一个非常重要的实用程序,用于管理要被WinDbg检索使用的正确符号表的标识。它的使用是免费的,只要调试器配置正确,它就会在后台自动运行,并且可以自由访问微软的符号存储。

运行WinDbg

在W8界面上,右键单击你要使用的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下载并存储完整的符号文件。在您这样做之前,请注意—对于每个符号包—您应该至少有1GB的磁盘空间可用。这是因为,除了存储文件所需的空间外,还需要存储所需的临时文件。即使现在硬盘的成本很低,所占用的空间还是值得注意的。

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

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

除非特别说明,符号包是非累积的,所以如果你使用的是SP2的Windows版本,在安装SP2的符号之前,你需要安装原始RTM版本和SP1版本的符号。

创建转储文件

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

下载NotMyFault

要获取NotMyFault,请到SysInternals的Windows Internals Book页面,向下滚动到Book Tools部分,在那里你会看到一个下载链接。该工具包括一些选项,用于加载行为异常的驱动程序(这需要管理权限)。下载后,我在桌面上创建了一个快捷方式来简化访问。

记住,使用NotMyFault会导致系统崩溃,虽然我从未见过使用该工具出现问题,但在生活中,尤其是在计算机中,没有任何保证。所以,准备好你的系统,让任何需要访问它的人退出几分钟。保存包含信息的文件,否则可能会丢失并关闭所有应用程序。如果准备得当,机器应该会停机、重新启动,并且应该创建一个最小转储和一个内核转储。

运行notmyfault.

启动NotmyFault并选择高IRQL故障(内核模式)。..点击崩溃按钮。您的令人沮丧的令人沮丧将出现在一秒钟内,迷你upp和内核转储文件都将保存,并且如果配置正确 - 您的系统将重新启动。

Windows 8

当Windows 8崩溃时,你会在新的蓝屏上看到(1)“沮丧的皱眉”。重启后,你会看到(2)将崩溃文件发送给微软的提议。最后一个屏幕(3)列出了将要发送的文件,显示了隐私声明,并请求您允许发送这些文件。

在W8 UI上,将是一个蓝色的乐队,消息“您的电脑遇到了问题。。”。如果单击“发送详细信息”按钮,Microsoft将使用WindBG和命令“!Acareze”作为自动服务的一部分,以识别问题的根本原因。输出与已知驱动程序错误修复的数据库组合以帮助识别失败。

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

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

文件|打开崩溃转储

并指向它以打开您想要分析的转储文件。注意,WinDbg会打开任何大小的转储文件;一个最小转储文件、内核转储文件或完整转储文件。当被要求保存工作区信息时,说Yes;它将记住转储文件的位置。

将打开一个命令窗口。如果这是您第一次在这个系统上使用WinDbg,或者第一次查看以前没有加载过文件的另一个系统的转储文件,那么填充信息可能需要一些时间。这是因为调试器必须确定Windows的准确版本,然后到微软的SymServ,找到相应的符号文件,并下载它需要的符号文件。在随后的会话中,这个步骤是不需要的,因为符号保存在硬盘驱动器上。一旦WinDbg有了它需要的符号,它就会运行一个分析,并用结果填充窗口。这将包括基本信息,如WinDbg的版本、打开的转储文件的位置和名称、正在使用的符号搜索路径,甚至简要的分析提供,在本例中,

可能的原因:myfault.sys

当然,我们知道这是真的(我的错)。sys是NotMyFault的驱动程序名称)。

windbg错误消息

如果windbg报告***警告或***错误,则解决方案通常很简单。以下列出了常用消息,它们的意思以及如何解决它们。

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

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

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

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

被展示。

可能的原因:

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

•连接失败;检查您的Internet连接以确保它正常工作。

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

注意,如果防火墙一开始就阻止WinDbg下载符号表,可能会导致文件损坏。如果解除防火墙封锁并试图再次下载符号文件无效;文件仍然损坏。最快的修复方法是关闭WinDbg,删除symbols文件夹(最可能设置为c:\symbols),并解除防火墙的阻止。接下来,重新打开WinDbg和转储文件。调试器将重新创建文件夹并重新下载符号。

在纠正错误之前,不要做进一步的分析。

如果您看到以下错误,没有担心:

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

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

Windows 8

Windbg会自动提出如图所示的罪魁祸首。

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

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

如上所述,当您使用WinDbg打开一个转储文件时,它会自动运行一个基本的分析,这通常会在没有给调试器任何直接命令的情况下找到罪魁祸首,如屏幕上显示的“可能是由:myfault.sys引起的”。

更多的信息

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

!分析-v.

lmvm。

命令WinDbg的新方法

通常,您需要输入所需的命令和参数。然而,事情已经变了,Windows也变了。如果你仔细看一下WinDbg的界面,就在“Bugcheck Analysis”框的下方,上面写着“Use !analyze -v来获取详细的调试信息”,并且命令以蓝色下划线显示。是的,它是一个链接。只要触摸它,命令就会为你运行。但是,如果您没有触摸屏,鼠标也可以工作,或者采用传统的方法,在界面底部的窗口中输入命令,在那里您会看到提示符“kd>”(代表“内核调试器”)。一定要做得精确;在这种情况下,语法是关键。例如,注意命令和“-v”之间的空格。“v”或verbose开关告诉WinDbg您需要所有细节。 You can do the same where you see the link for myfault which will display metadata for the suspect driver.

来自!分析-V

通过提供的分析!Analyze -V是英语和程序员的组合,但仍然是一个很好的开始。事实上,在许多情况下,你不需要进一步去。如果你认识到崩溃的原因,你可能已经完成了。

来自!分析-V

Windows 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处于活动状态,然后发生了页面错误,系统声明了错误检查,这是系统停止时(蓝色屏幕)。

一个方法来看,这就是当你在系统崩溃时看到堆栈上有一个活跃的第三方驱动程序时,就像走进一个房间,找到一个身体在地板上,有人在他的吸烟枪站在它上面手;这并不意味着他是有罪的,但让他怀疑第1号。

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

知道嫌疑人的名字是不够的;你得知道他住在哪里,做什么。这就是lmvm的用处。它提供了从这个映像路径(不是所有驱动程序都位于%systemroot%\system32\drivers.)、时间戳、映像大小和文件类型(在本例中是一个驱动程序)到制作它的公司、它所属的产品、版本号和描述的数据范围。一些公司甚至提供技术支持的联系方式。但是,调试器报告的内容完全取决于开发人员包含的内容,在某些情况下,这些内容非常少。

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

如果你有任何关于使用WinDbg的问题,请查看WinDbg帮助文件。它是优秀的。而且,在阅读命令时,一定要查看关于许多参数的信息,比如“-v”,它返回更多(详细)信息。

另一个三

虽然这是真的,通过遵循上面的指示,您可能会立即知道两次崩溃的原因;这会让其他第三个令人讨厌。那你怎么办呢?嗯,可能导致系统失败的列表不缩短;它可以从箱扇失败的范围内,允许系统过热到坏记忆。

有时是硬件的问题

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

这个简单的诊断工具很快,工作得很好。许多人折扣内存问题的可能性,因为他们占了这么小的系统崩溃。然而,他们往往是让你猜到最长的原因。

Windows是罪魁祸首吗?

答案很可能是否定的。对于所有那些迅速将此类事件归咎于微软的反对者来说,事实是Windows很少会导致系统故障。但是,如果ntoskrnl.exe (Windows core)或win32. exe。sys(在Windows上负责“GUI”层的驱动程序)被称为罪魁祸首——他们经常是——不要太快地接受它。更有可能的情况是,一些错误的第三方设备驱动程序调用Windows组件执行操作,并传递了错误的指令,比如告诉它写入不存在的内存。所以,虽然操作系统肯定会出错,但在责怪微软之前,排除所有其他可能性。

我的防病毒司机怎么样?

通常,您可能会看到一个名为罪魁祸首的防病毒司机,但有很好的机会它无罪。这就是为什么:对于防病毒代码工作,它必须观看所有文件开口和关闭。为实现此目的,代码位于OS中的低层,并且不断工作,以便他通常会在发生崩溃时处于活动状态的函数调用堆栈中。

失踪的供应商信息?

一些驾驶员供应商不花时间与其模块包含足够的信息。因此,如果LMVM没有帮助,请尝试查看图像路径上的子目录(如果有一个)。其中一个人通常将是供应商名称或其收缩。另一种选择是搜索谷歌。输入驱动程序名称和/或文件夹名称。您可能会发现供应商以及已发布有关司机信息的其他人。

总结

请记住,您阅读此底漆并在系统上配置WindBG需要的时间远远超过您需要解决三个崩溃的两种崩溃。实际上,大多数崩溃的分析努力将花费不到一分钟。而且,虽然另一个第三个肯定会更具挑战性,但至少你还有更多的时间来尝试。

史密斯是亚历山大Lan Inc.的总裁,是一个自由顾客和作家。他可以到达DirkADSmith@gmail.com

乍一看
  • Windows 8.1系统建设者OEM DVD 64位

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