如何在不到一分钟的时间内解决Windows 8崩溃
视窗8已经出现了一段时间,具有一个像令人讨厌一样酷的界面。。。直到你掌握它。但是,与任何计算机操作系统一样,它可能会崩溃。幸运的是,有一种简单的方法来解决大多数崩溃的原因;只需调用WindBG,Windows调试器;一个免费的工具,用于诊断Windows崩溃的最常见原因 - 行为不端的第三方驱动因素。
在W8中,已经修改了死亡/ BSOD的蓝色屏幕,包括一个大,简单:(意思是人类(如果不是非常有信息)的语言。(观看一个幻灯片的版本它能帮你度过任何难关。
Windows 8死亡的蓝色屏幕已成为令人沮丧的令人沮丧。
同时,微软在转储文件创建和管理过程中取得了进步服务器2012。有关早期操作系统,请参阅在几分钟内解决Windows 7崩溃问题或者,对于XP和2000,见如何在几分钟内解决窗户崩溃。
对Windows崩溃
操作系统崩溃与应用程序崩溃、系统挂起或其他问题。在大多数情况下,操作系统崩溃是一种保护措施。当操作系统发现关键设备出现故障,或者由于可能的病毒、坏的设备驱动程序甚至RAM故障,内部操作系统状态被确定为不一致时,通常立即停止会更安全。否则,继续操作将导致更严重的损害,如应用程序数据损坏或丢失。
[正在寻求帮助:在Windows崩溃时,该去哪里寻求帮助]
三分之二的系统崩溃是由第三方驱动程序在内核模式下采取不适当的操作(比如写入不存在的内存)造成的,在这种模式下,他们可以直接访问操作系统内核和硬件。
相反,在用户模式下运行的驱动程序,只能间接访问操作系统内核,不能直接导致崩溃。一小部分崩溃是由硬件问题(如糟糕的内存)造成的,更少是由操作系统本身的错误造成的。有些原因是未知的。
谢谢你的记忆转储
一个记忆转储是你曾经拥有的最丑陋的最好的朋友。它是操作系统停止的时间点的计算机系统状态的快照。而且,在转储文件中包含的大量不太友好的数据中,您通常只需要一些易于掌握和使用的项目。随着Windows 8的引入,OS现在创建了四种不同的内存转储;完整,内核和miniDumps和新的自动内存转储。
1.自动内存转储
位置:%SystemRoot%\Memory.dmp
尺寸:≈OS内核的≈User
自动内存转储是安装Windows 8时选择的默认选项。创建以支持已更新的“系统托管”页面文件配置,以减少磁盘上的页面文件大小。自动内存转储选项产生内核内存转储,差异是当您选择自动时,它允许SMSS流程减少小于RAM大小的页面文件。
2.完全内存转储
位置:%SystemRoot%\Memory.dmp
大小:≈Size的RAM和1MB
一个完整的(或完整的)内存转储大约等于安装的RAM的数量。由于许多系统具有多个gb,这可能很快成为一个存储问题,特别是如果您遇到的不仅仅是偶尔的崩溃。通常,我不建议保存完整的内存转储,因为它们占用太多空间,通常是不需要的。然而,在与Microsoft(或其他供应商)合作查找非常复杂问题的原因时,完整的内存转储将非常有帮助。因此,坚持使用自动转储,但要准备在少数情况下切换设置以生成完整转储。
3.内核内存转储
位置:%SystemRoot%\Memory.dmp
尺寸:≈内核模式组件“拥有”的物理内存大小
内核转储的大小与Windows 8内核占用的RAM大小大致相同。在我的测试系统中,在64位处理器上运行Windows 8,内存为4GB,内核转储约为336MB。由于有时需要传输转储文件,所以我压缩了它,将其压缩到80MB。内核转储的一个优点是它包含分析所需的二进制文件。默认情况下,自动转储设置创建内核转储文件,仅保存最近的转储文件,以及每个事件的最小转储文件。
4.小型或minidump
位置:%Systemroot%\ MiniDump
尺寸:X64上的X86和128K上至少64k(我的W8测试PC上的279k)
最小转储包括寄存器在错误点给出它们的值时指向它们的内存页,以及错误线程的堆栈。它们之所以小,是因为它们不包含任何在故障发生时存储在内存中的二进制文件或可执行文件。
但是,这些文件对于调试器的后续分析是非常重要的。只要您在创建转储文件的机器上进行调试,WinDbg就可以在System Root文件夹中找到它们(除非在创建转储文件之后通过系统更新更改了二进制文件)。此外,调试器应该能够通过SymServ自动定位它们,SymServ是微软的在线符号文件存储。Windows 8为每个崩溃事件创建并保存一个最小的转储,本质上提供了系统生命周期中所有事件的历史记录。
配置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部分的调试工具,您可以免费下载Microsoft。
•大约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.接受许可协议
除去除Windows调试工具以外的所有检查标记
什么是符号?我为什么需要它们?
现在调试器已经安装,在调用转储文件之前,必须确保它能够访问符号文件。符号表是编译的副产品。当一个程序被编译时,源代码被从高级语言翻译成机器码。同时,编译器创建一个包含标识符、它们在程序中的位置以及它们的属性的符号文件。由于程序执行时不需要这些信息,因此可以将其取出并存储在另一个文件中。这减少了最终可执行文件的大小,从而占用更少的磁盘空间并更快地加载到内存中。但是,当程序出现问题时,操作系统只知道问题发生的十六进制地址,而不知道是谁在那里,也不知道那个人在做什么。通过使用SymServe可用的符号表提供了该信息。
Symserv(Symsrv)
在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下载并存储完整的符号文件。在您之前,请注意 - 对于每个符号包 - 您应该有至少1GB的磁盘空间。那是因为,除了存储文件所需的空间外,还需要需要所需的临时文件的空间。即使在这些天的硬盘低成本的情况下,所使用的空间也值得注意。
•每个x86符号包可能需要750 MB或更多硬盘空间。
•每个x64符号包可能需要640 MB或更多。
符号包是非累积,除非另有说明,否则如果您使用的是SP2 Windows版本,则需要在安装SP2的符号之前安装原始RTM版本和SP1的符号。
创建转储文件
如果没有内存转储可查看怎么办?不用担心。你可以自己生成一个。有不同的方法可以做到这一点,但最好的方法是使用Mark Russinovich创建的NotMyFault工具。
下载NotMyFault
要获得NotmyFault,请访问Sysinternals的Windows Internals Book页面,然后向下滚动到“书工具”部分,您将看到下载链接。该工具包括加载行为不端的驱动程序的选项(这需要管理权限)。下载后,我创建了从桌面的快捷方式来简化访问。
记住,使用NotMyFault会导致系统崩溃,虽然我从未见过使用该工具出现问题,但在生活中,尤其是在计算机中,没有任何保证。所以,准备好你的系统,让任何需要访问它的人退出几分钟。保存包含信息的文件,否则可能会丢失并关闭所有应用程序。如果准备得当,机器应该会停机、重新启动,并且应该创建一个最小转储和一个内核转储。
运行不是我的错
启动NotMyFault并选择High IRQL fault(内核模式),然后…点击崩溃按钮。您的沮丧表情将在一秒钟内出现,小型转储和内核转储文件都将被保存,如果配置正确,系统将重新启动。
当Windows 8崩溃时,你会在新的蓝屏上看到(1)“沮丧的皱眉”。重启后,你会看到(2)将崩溃文件发送给微软的提议。最后一个屏幕(3)列出了将要发送的文件,显示了隐私声明,并请求您允许发送这些文件。
W8用户界面上会出现一条蓝色带,显示“您的电脑出现问题…”。如果单击“发送详细信息”按钮,Microsoft将使用WinDbg和命令“!analyze”作为自动服务的一部分,以确定问题的根本原因。输出与已知驱动程序错误修复的数据库相结合,以帮助识别故障。
启动windbg和(经常)看到崩溃的原因
通过在W8 UI中右键单击WinDbg启动WinDbg,然后从屏幕底部弹出的栏中选择“以管理员身份运行”。调试器运行后,选择菜单选项
文件|打开崩溃转储
并指向它以打开您想要分析的转储文件。注意,WinDbg会打开任何大小的转储文件;一个最小转储文件、内核转储文件或完整转储文件。当被要求保存工作区信息时,说Yes;它将记住转储文件的位置。
将打开一个命令窗口。如果这是您第一次在这个系统上使用WinDbg,或者第一次查看以前没有加载过文件的另一个系统的转储文件,那么填充信息可能需要一些时间。这是因为调试器必须确定Windows的准确版本,然后到微软的SymServ,找到相应的符号文件,并下载它需要的符号文件。在随后的会话中,这个步骤是不需要的,因为符号保存在硬盘驱动器上。一旦WinDbg有了它需要的符号,它就会运行一个分析,并用结果填充窗口。这将包括基本信息,如WinDbg的版本、打开的转储文件的位置和名称、正在使用的符号搜索路径,甚至简要的分析提供,在本例中,
可能的原因:myfault.sys
当然,我们知道这是真的(我的错)。sys是NotMyFault的驱动程序名称)。
WinDbg错误消息
如果WinDbg报告***警告或***错误,解决方法通常很简单。下面列出了常见消息、它们的含义以及如何解决它们。
***警告:无法验证ntoskrnl.exe的时间戳
***错误:模块加载已完成,但无法为ntoskrnl.exe加载符号
这是很重要的。当您在WinDbg输出的开头附近看到这两条消息时,这意味着您将得不到所需的分析。这是在“Bugcheck Analysis”自动运行后确认的,消息
*****内核符号错误。请修正符号进行分析
显示。
可能的原因跟随:
•没有路径/错误的路径;没有设置符号文件的路径,或者路径不正确(查找输入错误,如空白)。检查符号路径。
•连接失败;检查你的互联网连接,确保它正常工作。
•访问被阻止;防火墙阻止访问符号文件或在检索期间损坏文件。请注意,没有防火墙阻止访问msdl.microsoft.com(它可能只允许访问www.microsoft.com)。
注意,如果防火墙一开始就阻止WinDbg下载符号表,可能会导致文件损坏。如果解除防火墙封锁并试图再次下载符号文件无效;文件仍然损坏。最快的修复方法是关闭WinDbg,删除symbols文件夹(最可能设置为c:\symbols),并解除防火墙的阻止。接下来,重新打开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命令揭示了崩溃的原因和可能的罪魁祸首。
the!分析-v提供了有关系统崩溃的更多详细信息。在这种情况下,它准确地描述了指示测试驱动程序(MyFault.sys);要在中断级别访问太高的地址。
分析
driver_irql_not_less_or_equal(d1)
试图访问中断请求级别(IRQL)过高的可分页(或完全无效)地址。这通常是由于驱动程序使用了不正确的地址造成的。
在“调试详细信息”下,报告表明问题是“WIN_8_DRIVER_故障”,NotMyFault.exe处于活动状态。
堆栈转储
使用!analyze -v调试器输出的一个重要特性是堆栈文本。无论何时查看转储文件,都要查看堆栈中任何第三方驱动程序的最右侧。在这种情况下,我们就会看出是我的错了。请注意,事件的时间顺序是从底部到顶部的;当系统执行每个新任务时,它会显示在顶部。在这个相当短的堆栈中,您可以看到myfault是活动的,然后发生了一个页面错误,系统声明了一个BugCheck,这是系统停止的时候(Blue screen)。
一种看待这个问题的方法是,当你看到一个第三方驱动程序在系统崩溃时在堆栈上活跃,这就像走进一个房间,发现地板上有一具尸体,有人站在旁边,手里拿着冒烟的枪;这并不意味着他有罪,而是让他成为头号嫌疑犯。
lmvm的输出(或者通过选择myfault)
知道嫌疑人的名字是不够的;你得知道他住在哪里,做什么。这就是lmvm的用处。它提供了从这个映像路径(不是所有驱动程序都位于%systemroot%\system32\drivers.)、时间戳、映像大小和文件类型(在本例中是一个驱动程序)到制作它的公司、它所属的产品、版本号和描述的数据范围。一些公司甚至提供技术支持的联系方式。但是,调试器报告的内容完全取决于开发人员包含的内容,在某些情况下,这些内容非常少。
找到供应商名称后,访问其网站,查看更新、知识库文章和其他支持信息。如果不存在或不能解决问题,请联系他们。他们可能会要求您发送调试信息(将调试器的输出复制到电子邮件或Word文档中很容易),或者他们可能会要求您向他们发送内存转储文件(首先对其进行压缩,既可以压缩它,又可以保护数据完整性)。
如果你有任何关于使用WinDbg的问题,请查看WinDbg帮助文件。它是优秀的。而且,在阅读命令时,一定要查看关于许多参数的信息,比如“-v”,它返回更多(详细)信息。
另三分之一
虽然按照上面的说明,你可能会立刻知道三分之二崩溃的原因;剩下那烦人的三分之一了。你会怎么做?可能导致系统故障的原因并不少;它的范围可以从风扇故障,导致系统过热,到糟糕的内存。
有时是硬件的问题
如果你有重复的崩溃,但没有明确或一致的原因,这可能是内存问题。两种检查内存的好方法是Windows内存诊断工具和Memtest86。转到控制面板,在搜索框中输入“内存”,然后选择“诊断您的计算机的内存问题”。
这个简单的诊断工具速度快,效果好。许多人都不太相信内存问题的可能性,因为它们只占系统崩溃的一小部分。然而,它们往往是让你猜测时间最长的原因。
是Windows罪魁祸首吗?
在所有概率中:没有。对于那些快速责备雷德蒙德的反对者进行此类事件,事实上是窗户很少是系统故障的原因。但是,如果ntoskrnl.exe(windows核心)或win32.sys(Windows上的“GUI”图层最负责的驱动程序)被命名为罪魁祸首 - 而且他们经常 - 不要太快接受它。一些错误的第三方设备驱动程序在Windows组件上调用它来执行操作并传递错误的指令,例如将其写入不存在的内存。所以,虽然操作系统当然可以犯错,但在你归咎于微软之前排出所有其他可能性。
我的防病毒驱动程序呢?
通常,您可能会看到一个防病毒驱动程序被称为罪魁祸首,但它很有可能是无罪的。这就是为什么:为了防病毒代码工作,它必须监视所有文件的打开和关闭。为了实现这一点,代码位于操作系统的底层,并且一直在工作,因此当崩溃发生时,他将经常处于处于活动状态的函数调用堆栈中。
失踪的供应商信息?
一些驱动程序供应商没有花时间在其模块中包含足够的信息。因此,如果lmvm没有帮助,请尝试查看映像路径上的子目录(如果有)。其中一个通常是供应商名称或其缩写。另一个选项是搜索谷歌。键入驱动程序名称和/或文件夹名称。您可能会找到供应商以及发布驱动程序信息的其他人。
概括
请记住,阅读本入门和在系统上配置WinDbg所需的时间远远超过解决三次崩溃中的两次。事实上,大多数崩溃分析工作所需的时间都不到一分钟。尽管其他第三次可能更具挑战性,但至少您有更多的时间来尝试。
史密斯是亚历山大·兰公司(Alexander LAN Inc.)的总裁,该公司是IT行业的自由职业顾问和作家。可以和他联系DirkADSmith@gmail.com。
版权©2013足球竞彩网下载