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

123.4567891011121314151617181920. 18页
第18页,共20页

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

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

Windows 8.

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

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

关于Windows崩溃

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

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

三个系统崩溃中的两个是由第三方驱动程序引起的,占用内核模式中的不适当行动(如写入不存在的内存),它们可以直接访问OS内核和硬件。

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

谢谢你的记忆转储

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

1.自动内存转储

位置:%systemroot%\ memory.dmp

Size:≈操作系统内核大小

“自动内存转储”是安装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的Windows 8,内核转储约为336MB。由于,只要偶尔,必须运输转储文件,我压缩它,使其降至80MB。内核转储的一个优点是它包含分析所需的二进制文件。自动转储设置默认创建内核转储文件,仅保存最近的,以及每个事件的MiniDump。

4.小或迷你倾销

地点:% SystemRoot % \ Minidump

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

MiniDumps包括通过寄存器指向它们的内存页面,给出它们在故障点的值,以及故障线程的堆栈。是什么让他们小的是,它们不包含在失败时内存中内存中的任何二进制或可执行文件。

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

配置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)。

答:sdksetup.exe发射。

b .指定地点:

建议安装路径如下:

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

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

C.接受许可协议

除去除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:驱动器的根目录中,因此:

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

运行notmyfault.

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

Windows 8.

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

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

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

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

文件|打开崩溃转储

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

命令窗口将打开。如果这是第一次使用此系统上的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,删除符号文件夹(您最有可能设置在C:\符号),并取消阻止防火墙。接下来,重新打开windbg和转储文件。调试器将重新创建文件夹并重新下载符号。

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

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

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

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

Windows 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

Windows 8.

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

analyze -v提供了关于系统崩溃的更多细节。在本例中,它准确地描述了测试驱动程序(myfault.sys)被指示做什么;访问一个中断级别过高的地址。

分析

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)

尝试在太高的中断请求级别(IRQL)中访问可粘性(或完全无效)地址。这通常由使用不当地址的驱动程序引起。

在调试详细信息下,该报告表明问题是“Win_8_Driver_Fault”,而且NotmyFault.exe处于活动状态。

堆栈溢出

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

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

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

知道嫌疑人的名字还不够;你需要知道他住在哪里以及他的所作所为。这就是LMVM进来的地方。它提供了来自此图像路径的一系列数据(并非所有驱动程序都生活在%SystemRoot%\ System32 \ Drivers中。),时间戳,图像大小和文件类型(在这种情况下为驱动程序)到公司这使得它属于,版本号和描述。有些公司甚至包括技术支持的联系信息。但是,调试器报告的内容完全取决于所包括的开发人员,在某些情况下,这很少。

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

如果您对使用WindBG有任何疑问,请查看WindBG帮助文件。它很棒。并且,当读取关于命令时,务必查看提供关于许多参数的信息,例如“-v”,返回更多(冗长)信息。

另一个三

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

有时它是硬件

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

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

Windows是罪魁祸首吗?

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

我的防病毒驱动程序呢?

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

缺少供应商信息?

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

总结

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

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

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

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