如何在不到一分钟的时间内解决Windows 8崩溃
窗户8已经出来了一段时间,具有一个界面,酷,因为它是烦人的…直到你找到窍门。但是,就像任何电脑操作系统一样,它也会崩溃。幸运的是,有一种简单的方法可以解决大多数崩溃的原因;只要调用WinDbg, Windows调试器;一个免费的工具,用于诊断Windows崩溃的最常见原因——行为不当的第三方驱动程序。
在W8中,蓝屏死机/蓝屏已被修改为包括一个大的,简单的:(表情符号和短消息(如果不是非常有用的)人类语言。(看幻灯片版本这贯穿了任何崩溃。]
死亡的Windows 8的蓝屏已经成为无奈的皱眉。
同时,微软在转储文件创建和管理过程中取得了进步服务器2012。有关早期操作系统,请参阅在几分钟内解决Windows 7崩溃问题或者,对于XP和2000,请参阅如何解决在几分钟内Windows崩溃。
关于Windows崩溃
操作系统崩溃都是由完全不同应用程序崩溃、系统挂起或其他问题。在大多数情况下,操作系统崩溃是一种保护措施。当操作系统发现关键设备出现故障,或者由于可能的病毒、坏的设备驱动程序甚至RAM故障,内部操作系统状态被确定为不一致时,通常立即停止会更安全。否则,继续操作将导致更严重的损害,如应用程序数据损坏或丢失。
[正在寻求帮助:在Windows崩溃时,该去哪里寻求帮助]
三个系统崩溃中的两个是由第三方驱动程序引起的,占用内核模式中的不适当行动(如写入不存在的内存),它们可以直接访问OS内核和硬件。
相比之下,在用户模式下运行的驱动程序,只能间接访问OS内核,不能直接导致崩溃。小百分比崩溃是由诸如错误的内存等硬件问题引起的,甚至在OS本身中的故障较少。一些原因是简单的未知。
感谢您的内存转储
记忆转储器是你有生以来最丑的好朋友。它是操作系统停止时计算机系统状态的快照。而且,在转储文件中包含的大量看起来不太友好的数据中,您通常只需要一些易于掌握和使用的项。随着Windows 8的引入,操作系统现在创建了四种不同的内存转储;Complete, Kernel, and Minidumps和新的自动内存转储。
1.自动内存转储
位置:%SystemRoot%\Memory.dmp
尺寸:≈OS内核的≈User
自动内存转储是当您安装Windows 8。它的建立,以支持“系统管理”页面文件已被更新,以减少对磁盘上的页面文件的大小配置中选择默认选项。自动内存转储选项会产生一个核心内存转储,所不同的是,当你选择自动,它允许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
大小:至少64K在x86和128K在x64(279K我的W8测试PC)
MiniDumps包括通过寄存器指向它们的内存页面,给出它们在故障点的值,以及故障线程的堆栈。是什么让他们小的是,它们不包含在失败时内存中内存中的任何二进制或可执行文件。
但是,这些文件对调试器的后续分析至关重要。只要您在创建转储文件的机器上调试,WindBG就可以在系统根文件夹中找到它们(除非在创建转储文件后系统更新,否则二进制文件)。或者,调试器应该能够通过Symserv,Microsoft的符号文件的在线存储自动定位它们。Windows 8为每次碰撞事件创建并保存MiniDump,基本上为系统生命中的所有事件提供了历史记录。
配置W8得到正确的内存转储
虽然W8的默认配置将操作系统设置为生成您最可能需要的内存转储格式,但请快速查看以确定。在W8样式菜单中,只需键入“control panel”(或在许多情况下仅输入前几个字母),它会自动神奇地将您带到应用程序页面,在该页面中,您会看到“control panel”周围有一个白色框;按Enter键将带您进入熟悉的界面。
通过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 UI中,右键单击WinDbg,然后从屏幕底部弹出的栏中选择“以管理员身份运行”。
SymServ(也说明SymSrv)是由微软管理正确的符号表的鉴定通过WinDbg中使用要检索提供了一个非常重要的工具。不收取任何费用供其使用,并在后台,只要正确配置调试器自动功能,并拥有在微软的符号存储不受限制地进入。
WinDbg的运行
从W8 UI上的WinDbg版本将使用(64或86),单击鼠标右键,然后从该栏中选择“以管理员身份运行”,从屏幕底部弹起。然后你会看到一个奇异平平无奇的应用程序界面;的灰色块。在填充数据之前,你必须告诉它在哪里可以找到符号文件。
设置符号文件路径
有一个大量的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版本中,您将需要安装符号为原始RTM版本和SP1安装符号SP2之前。
创建转储文件
如果你没有内存转储怎么看?不用担心。你可以自己生成一个。有不同的方法可以做到这一点,但最好的方法是使用由Mark Russinovich创建的名为NotmyFault的工具。
下载notmyfault.
为了得到NotMyFault,转到Windows内部书页在Sysinternals的和向下滚动到工具书部分,在那里你会看到一个下载链接。该工具包括的选择的加载行为异常的驱动程序(需要管理员权限)的选项。下载后,我创建了从桌面到简化访问的快捷方式。
记住,使用NotMyFault会导致系统崩溃,虽然我从未见过使用该工具出现问题,但在生活中,尤其是在计算机中,没有任何保证。所以,准备好你的系统,让任何需要访问它的人退出几分钟。保存包含信息的文件,否则可能会丢失并关闭所有应用程序。如果准备得当,机器应该会停机、重新启动,并且应该创建一个最小转储和一个内核转储。
运行不是我的错
启动NotMyFault并选择High IRQL fault(内核模式),然后…点击崩溃按钮。您的沮丧表情将在一秒钟内出现,小型转储和内核转储文件都将被保存,如果配置正确,系统将重新启动。
当Windows 8崩溃时,你会在新的蓝屏上看到(1)“沮丧的皱眉”。重启后,你会看到(2)将崩溃文件发送给微软的提议。最后一个屏幕(3)列出了将要发送的文件,显示了隐私声明,并请求您允许发送这些文件。
W8用户界面上会出现一条蓝色带,显示“您的电脑出现问题…”。如果单击“发送详细信息”按钮,Microsoft将使用WinDbg和命令“!analyze”作为自动服务的一部分,以确定问题的根本原因。输出与已知驱动程序错误修复的数据库相结合,以帮助识别故障。
启动WinDbg并(经常)查看崩溃的原因
通过在W8 UI中右键单击WinDbg启动WinDbg,然后从屏幕底部弹出的栏中选择“以管理员身份运行”。调试器运行后,选择菜单选项
文件|打开崩溃转储
并指向它打开要分析的转储文件。请注意,WindBG将打开任何大小转储文件;miniDump,内核转储或完整的转储文件。当提供保存工作区信息时,说是;它会记住转储文件的位置。
将打开一个命令窗口。如果这是您第一次在这个系统上使用WinDbg,或者第一次查看以前没有加载过文件的另一个系统的转储文件,那么填充信息可能需要一些时间。这是因为调试器必须确定Windows的准确版本,然后到微软的SymServ,找到相应的符号文件,并下载它需要的符号文件。在随后的会话中,这个步骤是不需要的,因为符号保存在硬盘驱动器上。一旦WinDbg有了它需要的符号,它就会运行一个分析,并用结果填充窗口。这将包括基本信息,如WinDbg的版本、打开的转储文件的位置和名称、正在使用的符号搜索路径,甚至简要的分析提供,在本例中,
可能是由:myfault.sys造成的
当然,我们知道这是真的(我的错)。sys是NotMyFault的驱动程序名称)。
WinDbg错误消息
如果WinDbg报告***警告或***错误,解决方法通常很简单。下面列出了常见消息、它们的含义以及如何解决它们。
***警告:无法验证ntoskrnl.exe的时间戳
***错误:模块加载已完成,但无法为ntoskrnl.exe加载符号
这个很重要。当您在WindBG的输出开始附近看到这两条消息时,这意味着您将无法获得所需的分析。在“错误检查分析”自动运行之后确认这一点确认,以及消息
*****内核符号错误。请修复符号进行分析
显示。
可能的原因:
•没有路径/错误路径;尚未设置符号文件的路径,或者路径不正确(查找拼写错误,例如空白空间)。检查符号路径。
•连接失败;检查您的Internet连接以确保它正常工作。
•访问受阻;防火墙阻止访问符号文件或文件检索过程中被损坏。见没有防火墙阻止访问msdl.microsoft.com(它可以仅允许访问www.microsoft.com)。
请注意,如果防火墙最初阻止WindBG下载符号表,则它可能会导致文件损坏。如果解除防火墙并再次尝试下载符号文件不起作用;该文件仍然损坏。最快的修复是关闭WindBG,删除符号文件夹(您最有可能设置在C:\符号),并取消阻止防火墙。接下来,重新打开windbg和转储文件。调试器将重新创建文件夹并重新下载符号。
在纠正错误之前,不要做进一步的分析。
如果您看到以下错误,请不要担心:
***警告:无法验证时间戳myfault.sys
***错误:模块加载已完成,但无法为myfault.sys加载符号
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
analyze -v命令揭示了崩溃的原因和可能的罪魁祸首。
该!分析-v提供有关系统崩溃的详细信息。在这种情况下,它准确地描述了测试驱动程序(myfault.sys)奉命做;在中断水平过高访问的地址。
分析
DRIVER_IRQL_NOT_LESS_OR_EQUAL(D1)
试图访问中断请求级别(IRQL)过高的可分页(或完全无效)地址。这通常是由于驱动程序使用了不正确的地址造成的。
在“调试详细信息”下,报告表明问题是“WIN_8_DRIVER_故障”,NotMyFault.exe处于活动状态。
堆栈转储
调试器输出的一个重要特征!Analyze -V是堆栈文本。每当查看转储文件时,始终查看任何第三方驱动程序的堆栈的最右端。在这种情况下,我们会看到myfault。请注意,事件的年代序列从底部到顶部;由于每个新任务由其在顶部显示的系统执行。在这种相当短的堆栈中,您可以看到MyFault处于活动状态,然后发生了页面错误,系统声明了错误检查,这是系统停止时(蓝色屏幕)。
一种方法是,当系统崩溃时,当你看到一个第三方驱动程序活跃在堆栈上时,就像走进一个房间,发现地板上有一具尸体,有人站在上面,手里拿着一把冒烟的枪;这并不意味着他有罪,而是让他怀疑是头号人物。
从lmvm输出(或通过选择myfault)
知道嫌疑人的名字还不够;你需要知道他住在哪里以及他的所作所为。这就是LMVM进来的地方。它提供了来自此图像路径的一系列数据(并非所有驱动程序都生活在%SystemRoot%\ System32 \ Drivers中。),时间戳,图像大小和文件类型(在这种情况下为驱动程序)到公司这使得它属于,版本号和描述。有些公司甚至包括技术支持的联系信息。但是,调试器报告的内容完全取决于所包括的开发人员,在某些情况下,这很少。
找到供应商的名称后,转到其网站并检查更新,知识库文章和其他支持信息。如果此类项目不存在或无法解决问题,请联系它们。他们可能会要求您沿着调试信息发送(很容易将输出从调试器复制到电子邮件或Word文档中),或者他们可能会要求您将内存转储发送到内存转储(首先zip zip zip,两者都可以压缩它并保护数据完整性)。
如果您对使用WindBG有任何疑问,请查看WindBG帮助文件。它很棒。并且,当读取关于命令时,务必查看提供关于许多参数的信息,例如“-v”,返回更多(冗长)信息。
另三分之一
虽然这是真的,通过遵循上面的指示,您可能会立即知道两次崩溃的原因;这会让其他第三个令人讨厌。那你怎么办呢?嗯,可能导致系统失败的列表不缩短;它可以从箱扇失败的范围内,允许系统过热到坏记忆。
有时它是硬件
如果你有重复的崩溃,但没有明确或一致的原因,这可能是内存问题。两种检查内存的好方法是Windows内存诊断工具和Memtest86。转到控制面板,在搜索框中输入“内存”,然后选择“诊断您的计算机的内存问题”。
这个简单的诊断工具速度快,效果好。许多人都不太相信内存问题的可能性,因为它们只占系统崩溃的一小部分。然而,它们往往是让你猜测时间最长的原因。
Windows是罪魁祸首吗?
在所有的可能性:无。对于所有谁是快指责微软对此类事件的反对者,但事实是,Windows是很少的系统故障的原因。但是,如果ntoskrnl.exe中(Windows系统)或win32.sys(即最负责Windows上的“GUI”层驱动器)被命名为罪魁祸首 - 他们往往是 - 不要太快接受它。这是更有可能的是呼吁Windows组件一些错误的第三方设备驱动程序来执行操作,并通过一个糟糕的指令,比如告诉它写不存在的内存。因此,尽管操作系统肯定可以犯错,用尽所有其他的可能性,你责怪微软之前。
我的防病毒司机怎么样?
通常,您可能会看到一个名为罪魁祸首的防病毒司机,但有很好的机会它无罪。这就是为什么:对于防病毒代码工作,它必须观看所有文件开口和关闭。为实现此目的,代码位于OS中的低层,并且不断工作,以便他通常会在发生崩溃时处于活动状态的函数调用堆栈中。
失踪的供应商信息?
一些驱动程序供应商没有花时间在其模块中包含足够的信息。因此,如果lmvm没有帮助,请尝试查看映像路径上的子目录(如果有)。其中一个通常是供应商名称或其缩写。另一个选项是搜索谷歌。键入驱动程序名称和/或文件夹名称。您可能会找到供应商以及发布驱动程序信息的其他人。
总结
请记住,阅读本入门和在系统上配置WinDbg所需的时间远远超过解决三次崩溃中的两次。事实上,大多数崩溃分析工作所需的时间都不到一分钟。尽管其他第三次可能更具挑战性,但至少您有更多的时间来尝试。
史密斯是亚历山大Lan Inc.的总裁,是一个自由顾客和作家。他可以到达DirkADSmith@gmail.com。