Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 微软 > Windows优化 > 正文

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

时间:2015-03-16 16:57 来源:网络整理 作者:51ou.com 阅读:

  【精选译文】想准备使用WindDbg来解决Windows 7系统崩溃,需要一台个人电脑满足下列要求:

  32位或64位Windows 7/Vista/XP或Windows Server 2008/2003

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

  正常的互联网连接

  微软Internet Explorer 5.0或更高版本

  WinDBG的最新版本是Windows SDK中的一个选项。SDK下载文件名为winsdk web.exe,大小498KB,可以免费下载。(注意:安装调试器后,可以删除庞大的下载文件,从而腾出大量空间。)

  内存转储(页面文件必须在C:上,以便Windows保存内存转储文件)

  安装WinDbg

  下载Windows SDK、运行安装向导程序后,选择Common Utilities(常用实用程序)下面的Debugging Tools for Windows(Windows调试工具)选项。

  

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

  配置启动和恢复

  这一步很烦人。因为不太容易找到启动和恢复对话框;为了检查系统已设定成在错误检查期间采取合适的动作,包括要不要自动重新启动、保存多少大小的转储文件,需要这个对话框。

  找到启动和恢复对话框:

  1、选择屏幕左下角的Start(开始)按钮

  2、选择Control Panel(控制面板)

  3、选择System and Security(系统和安全)

  4、从右边栏的选项中选择System(系统)

  5、从左边栏中选择Advanced system settings(高级系统设置),显示System Properties(系统属性)对话框

  6、在系统属性对话框中选择Advanced(高级)选项卡

  7、在启动和恢复区中选择Settings(设置)按钮

  看到如下所示的启动和恢复对话框:

  

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

  确保启动和恢复设置是否正确

  在System failure(系统故障)下

  1、勾选Write an event to the system log(将事件写入系统日志)

  2、勾选Automatically restart(自动重新启动)

  3、选择Kernel memory dump(核心内存转储)

  4、确保转储文件写入%SystemRoot%\MEMORY.DMP

  5、勾选Overwrite any existing file(覆盖任何现有文件),以节省硬盘空间

  请注意:这将意味着你的系统将既保存内核转储文件,又保存微型转储文件。然而,尽管你有一个微型转储用于每个事件,但保存的将是最近一个内核转储。

  配置WinDbg

  启动调试器:想启动WinDbg,请依次选择下列:

  Start | All Programs | Debugging Tools for Windows| WinDbg

  开始|所有程序| Windows调试工具|WinDbg

  如果你要随时使用WindDbg,需要简化这个程序的启动:只要把它固定到Startup(启动)菜单上,或者发送快捷方式到桌面上。

  符号有多重要?

  在你想找到转储文件中的某个异常模块、急于挽救局面之前,得确保调试器已准备就绪。最重要的是,你得确信它会为你在排除故障的那个操作系统的确切版本找到符号文件。      

  符号表是编译后的产物。当某个程序被编译后,源代码从一种高级语言转换成了机器码。与此同时,编译器会创建一个符号文件,带有标识符列表、标识符在程序中的位置及其属性。一些标识符是全局和局部变量以及函数调用。程序不需要这些信息才能执行。因而,信息可以取出来存储在另一个文件中,减小了最终可执行文件的大小。

  与较大的可执行文件相比,较小的可执行文件占用磁盘空间较少,加载到内存的速度较快。但凡事都有另一面:某程序引起问题时,操作系统只知道出现问题的十六进制地址。你需要比这更多的信息,才能确定哪个程序在使用该内存空间,它试图在进行什么操作。Windows符号表就能解答这个问题,而可以访问针对特定系统内存的符号好比将地名加在地图上。反过来,分析符号表错误的转储文件好比拿着一张波士顿的地图在旧金山找路。

  配置WinDbg以定位符号

  Windows有数量多得惊人的符号表文件。之所以这样,是因为操作系统的每个版本,甚至一次性版本,都会带来一个新文件。幸运的是,WinDbg可以为你处理这件事,但必须为它配置正确的搜索路径。要做到这一点,就要启动WinDbg,并依次选择下列:

  File | Symbol file path

  文件|符号文件路径

  然后输入下列路径:(确保你的防火墙允许访问msdl.microsoft.com)

  srv*c:\cache*

  请注意:星号之间的地址表明你想把符号存储在何处,以便将来访问。比如说,我把符号存储在C:驱动器根目录下一个名为symbols的文件夹中,因而:

  srv*c:\symbols*

  打开内存转储时,WinDbg会查看可执行文件(.exe和.dll等文件),并提取版本信息。然后它会请求微软的符号服务器,该服务器包含该版本信息,并找到确切的符号表,从中获取信息。它不会下载你在排除故障的特定操作系统的所有符号,只会下载需要的符号。另外,你可以选择从微软下载并存储完整的符号文件。然而,对于你在分析的操作系统的每个版本而言,这个文件的大小在600MB到800MB之间。相比之下,WinDbg下载的文件不到100MB,即可分析测试机上操作系统的好几个版本。即使如今硬盘成本很低,节省的空间还是相当大。

  关于转储文件

  内存转储文件是一份快照,表明了系统崩溃时内存里面有什么。虽然内存转储文件也许是你可能需要查看的最乏味、最不直观的东西,但操作系统崩溃时,它是你最好的朋友。Windows创建了三种不同大小的内存转储:微型转储(minidump)、内核转储(kernel dump)和完全转储(full dump)。

  1、小型转储或微型转储

  Windows 7微型转储只有256K字节,不管从哪个标准来看都很小;然而,它们比Windows 2000/XP时候大了不少,那时候只有64K。微型转储之所以这么小,原因之一是,它们不含有故障出现时,内存中的任何二进制文件或可执行文件。不过,那些文件对调试器在之后进行分析来说至关重要。只要你在创建转储文件的机器上调试,WinDbg就能在System Root文件夹中找到它们(除非转储文件创建后,二进制文件因系统更新而更改)。此外,调试器应该能够通过SymServ来找到它们。如果配置得当,除了内核转储外(下文有描述),Windows 7还会为每一次崩溃事件创建和保存微型转储。

  2、内核转储

  内核转储大小大致相当于Windows 7的内核占用的内存。在我的笔记本电脑上,内核转储约344MB大小,压缩后只有100MB多点。内核转储的一个优点是,它含有二进制文件。默认情况下,我总是让系统保存最近的内核转储。请记住:系统在保存内核转储时,也会保存微型转储。

  3、完整转储或完全转储

  完全内存转储大小相当于已安装内存的数量。由于许多系统有数GB内存,这方面的存储很快会成为问题,如果你频频遇到崩溃,更是如此。我通常不建议保存完全内存转储,因为它们占用太多的空间,而且一般也不需要。不过微软的Vachon倒建议:“如果你试图调试一个很复杂的问题,比如设备中多个服务之间的远程过程调用(RPC)问题,又想看看这些服务在用户模式下进行什么操作,完全内存转储就大有帮助。”因此,要坚持保存内核转储,但要准备偶尔创建完全转储。

  如果没有内存转储可供使用,怎么办?

  如果你没有内存转储可以查看,也不用担心,可以让系统崩溃!最简单的方法(不必更改注册表的设置)是,运行一个名为NotMyFault的出色工具(这要感谢Mark Russinovich和SysInternals网站的团队)。它提供了一系列选项,可以加载行为异常的驱动程序(这需要管理员权限)。

  但记住:NotMyFault会制造系统崩溃!所以要让你的系统准备好,确信让需要访问该系统的任何人注销退出几分钟。凡是含有可能会丢失的信息的文件都要保存,并关闭应用程序。如果按上述方法配置了系统,它应该没有问题。机器应该会崩溃,重新启动,这样就有了内核转储和微型转储可以查看。我用过好多次,毫无问题。

  下载NotMyFault,迫使系统崩溃

  1、从下列微软网址下载NotMyFault工具:,将文件提取到文件夹。

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

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

  

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

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

  加载转储文件

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

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

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

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

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

  

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

  可能的错误信息

  如果你看到信息:

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

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

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

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

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

  防火墙禁止访问符号文件,或者符号文件在检索过程中已损坏

  如果你的路径和连接没问题,那么问题可能出在防火墙上。如果防火墙一开始阻止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验证时间戳

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

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

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

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

  

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

  命令

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

  

  !analyze –v

  以详细模式分析

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

  lmv

  显示加载模块的

  详细信息

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《如何处理系统崩溃后的Windows 7(1)》技术文章,《如何处理系统崩溃后的Windows 7(1)》详细使用和说明,有时《如何处理系统崩溃后的Windows 7(1)》可能不完善、敬请谅解!如果《如何处理系统崩溃后的Windows 7(1)》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片