如何处理系统崩溃后的Windows 7(2)

一切都很完美;你已升级到了Windows 7。系统打上了全部的补丁,所有驱动程序都更新了,安全很到位,说不定你甚至还有新硬件……但是仍然无法避免的是系统崩溃,在本文中会为大家详细介绍如何处理崩溃后的Windows 7。

AD:

下载NotMyFault,迫使系统崩溃

1、从下列微软网址下载NotMyFault工具:http://download.sysinternals.com/Files/Notmyfault.zip,将文件提取到文件夹。

2、鼠标右击NotMyFault.exe,或者在命令提示符下,键入NotMyFault。如果看到“You don't have permission to open this file”(你没有权限打开此文件)的信息,那么再试一次,但是鼠标右击时,选择“Run as Administrator”(以管理员身份运行)。酷言网 www.colyan.com

3、从菜单中选择High IRQL fault (kernelmode))和Do Bug按钮。这将生成一个内存转储文件和“Stop D1”错误。

win7bengkui-01

4、稍等一下...你的系统马上会回来,会有微型转储和内核转储可以查看了。

加载转储文件

如果你看到“你没有权限打开此文件”的信息,通过鼠标右击WinDbg来进行重新启动,选择“以管理员身份运行”。酷言网 www.colyan.com

一旦调试器运行,选择菜单选项File | Open crash dump(文件|打开崩溃转储),指向它,打开你想要分析的内存转储。如果你想让它记住转储文件在哪里,那么看到Save information for workspace(为工作区保存信息)时,选择Yes(确定)。

WinDbg会寻找Windows的这个确切版本的Windows符号文件。它引用符号文件路径,访问microsoft.com,并显示结果。

注意:如果调试器似乎很忙,那可能是第一次打开特定机器的转储文件,因而,WinDbg从SymServ下载符号。下次打开同一台机器的转储时,调试器似乎会快得多,因为符号文件已在本机上。

命令窗口会出现,崩溃分析显示在该窗口上。左下角将是KD>提示符。提示符右边是一个单行窗口,你可以在这里输入命令。

win7bengkui-02

可能的错误信息

如果你看到信息:

ERROR: Symbol file could not be found. Defaulted to export symbols for ntoskrnl.exe -

错误:符号文件找不到。默认情况下导出ntoskrnl.exe的符号-

通常是下列三种情况中有一种出错了:

路径不正确;仔细检查,确保之前输入的符号文件路径没有拼写错误或其他错误(如空白处)

连接失效,检查互联网连接,确保它在正常工作

防火墙禁止访问符号文件,或者符号文件在检索过程中已损坏 酷言网 www.colyan.com

如果你的路径和连接没问题,那么问题可能出在防火墙上。如果防火墙一开始阻止WinDbg下载符号表,这会导致符号文件损坏。如果对防火墙解禁,再次试图下载符号文件仍不行,那么表明符号文件已损坏。最快的解决办法是关闭WinDbg,删除symbols文件夹(最有可能设成c:\symbols),并且对防火墙解禁。现在,重新打开WinDbg和转储文件。调试器会重新创建文件夹,并重新下载符号。

如果你看到这个信息:

Kernel symbols are WRONG. Please fix symbols to do analysis.

内核符号错误。请改正符号,进行分析。

那么,WinDbg无法检索正确的符号,它会改而使用默认的符号表。但是这个警告信息表明,它无法生成正确的结果。请记住:符号表是在程序编译时生成的,所以每个Windows版本、补丁和热修复程序等都有符号表文件。返回到前一个章节,确保你设置的路径正确、连接正常,而且没有被阻止。

从头到尾浏览WinDbg的输出。你可能会看到类似以下的错误信息,表明它可能找不到信息myfault.sys:

Unable to load image \??\C:\Windows\system32\drivers\myfault.sys, Win32 error 0n2

无法加载映像\??\C:\Windows\system32\drivers\myfault.sys, Win32 error 0n2

 WARNING: Unable to verify timestamp for myfault.sys

警告:无法为myfault.sys验证时间戳酷言网 www.colyan.com

 ERROR: Module load completed but symbols could not be loaded for myfault.sys

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

这意味着,调试器在寻找myfault.sys方面的信息。然而,由于它像第三方驱动程序(是的,它是由微软开发,但肯定不是平常的微软产品),它没有符号(微软并不存储所有第三方驱动程序)。可以忽视 该错误信息。供应商通常在交付驱动程序时不附带符号文件,符号文件并不是你所必要的;没有符号文件,你也能找到有问题的驱动程序。

当你让WinDbg打开转储文件后,它会自动进行基本的分析。甚至不用给调试器下达任何直接命令,它已报出了可疑对象,如下面屏幕所示。

win7bengkui-03

命令

有数百个命令可以控制WinDbg;WinDbg是个功能很强大的工具。幸运的是,我们只需要一个命令。为了让探讨更深入一点,我们将多用两个命令,总共有三个命令。它们是!analyze –v、lmv和lmvm。

!analyze –v

以详细模式分析

!analyze –v显示了系统崩溃时,描述系统状态的信息,遇到的故障,以及谁是主要的可疑对象。

lmv

显示加载模块的

详细信息

lmv显示了一系列驱动程序及路径、版本和供应商信息。它常包含产品描述。lmv输出结果可能要很长的时间。留意WinDbg界面的左下角,你通常会看到kd>提示符。获取信息时,它会显示*BUSY*。只有kd>提示符返回后,你才能使用另外的命令。

lmvm

[模块名称]

显示某加载模块

(模块名称)的

详细信息酷言网 www.colyan.com

lmvm[模块名称]让你能够告诉调试器只获取那个特定模块的信息。比如说:lmvm myfault.sys。

!analyze -v

在命令窗口底部的命令行上输入!analyze -v(注意yynw命令与“-v”之间的空间)。V(详细)这个参数选项符告诉WinDbg,你想要所有的详细信息。它给出的解释结合了英语和编程术语,不过这是个良好的开头。实际上,在许多情况下,你可能不需要任何下一步操作。如果你明白了崩溃的原因,可能就搞定了。

下面这个例子是使用NotmyFault驱动程序来分析我们的崩溃。

win7bengkui-04

如果使用!analyze –v,调试器输出结果的一个重要部分是堆栈文本。每次查看转储文件,总要关注堆栈最右边,留意任何第三方驱动程序。在本例中,我们看到了myfault。请注意:事件由下往上按年月顺序排列;系统执行每个新任务时,新任务会显示在最上面,把以前的操作往下移。在这个很短的堆栈中,你会看到myfault处于活跃状态,然后出现页面错误,系统声明进行错误检查,这正是系统停止(蓝屏)的时候。请注意:部分数据已被清除,以便该内容能在一个页面上显示,“truncated”注释表明了这点。酷言网 www.colyan.com

win7bengkui-05

转载于:https://www.cnblogs.com/yankong02/archive/2012/07/19/2600381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值