今天和大家来谈谈当碰到系统蓝屏时应该去如何应对,Windows蓝屏是微软终极错误报告方式,也在微软内部称为蓝屏之死,可能我们碰到系统蓝屏是非常突然的,没有前期预兆和准备,只能重新启动从而导致数据的丢失。所以它是一个比较严重的错误了。微软DDK对蓝屏有一个官方定义:当windows操作系统遇到一种可能损害系统安全的情况,系统就会停止响应,这种情况被称为错误检查,也会被认为内核错误或系统错误。大家有没有想过Windows为什么要蓝屏,其实原因很简单,操作系统检测到了有人已经违反了系统的规则并危及系统安全,而操作系统必须要将它KILL掉,又因为它是内核态的代码并且权限很高,所以Windows就不会发现错误报告了,只能采用蓝屏方式。就像我们在运动比赛中一样,运动员违规比赛规则的话,裁判就会出去红牌让他离场。
我在这里先截张图给大家看看。
我就来介绍上面蓝屏的错误,首先我标出的第一个框是蓝屏的序言,表明Windows已经检测到了一个问题已经停止运行,并防止对你的计算机造成损害,基本所有的系统蓝屏的序言都是这样一个描述;我标出的第二个框是蓝屏错误情况的描述,这个描述根据不同类型的蓝屏会产生不会的描述,我们现在看到的描述是对于系统操作的一个关键线程或者关键进程被意外的退出或终止;我标出的第三个框是蓝屏的建议错误,也和蓝屏序言一样,是所有系统蓝屏都是一样的描述,应该来说对IT人员的意义不大,大概意思是让你重新启动计算机,确保你的硬件和软件是否被正确安全,如果问题依旧,建议你删除你的硬件或软件,如果还不行就进入系统的高级模式。我标出的第四个框是蓝屏的错误代码和参数,也是蓝屏错误中最为关键最为核心的信息,对我们IT人员分析和解决蓝屏问题是十分重要的信息。0x000000F4是蓝屏的停止代码,括号里面的四个参数是蓝屏停止参数;我标出的第五个框是蓝屏的转储信息,也称为Dump信息,也就是说Windows把发生蓝屏时的关键信息转储到文件中。
我上面的这张截图就是设置操作系统在内核转储时的必要设置,自动重新启动就是说当系统发生蓝屏时会自动重启,通常我们会取消勾选,不然我们就看不到蓝屏错误代码了,还有就是写入调试信息,我们通常选择的是小内核转储文件,而不会选择核心内核转储,不然产生的DUMP文件会非常的大,而小内核转储才64KB,不要小看这64KB的文件,里面的信息全部都是系统在转储过程中的关键信息,对IT人员来说是足以进行蓝屏的调试工作的。最后就是DUMP文件的存放位置了。
OKAY,谈了这么多了,我准备想把蓝屏在转领过程中发生一些动作详细的告诉给大家,比如蓝屏的信息收集、关闭中断、调用一些回调函数、蓝屏是如何绘制的等,但是,考虑到这是操作系统的一些底层内容,大家肯定感到很烦了,那么我就言归正传了,给大家推出一款非常实用的微软蓝屏调试工具,它就是WinDebuger,简称Windbg。我提供了它的下载路径,大家有时间可以下载体验下。
32 bit
[url]http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.7.05.0.exe[/url]
64 bit
[url]http://msdl.microsoft.com/download/symbols/debuggers/dbg_ia64_6.7.05.0.exe[/url]
这就是我安装好Windbg出现的调试画面,感觉十分朴实啊!!
下面,就是设置Symbol File Path,这边我要和大家解释一下这是什么意思,其实这个设置就是把我们生成的DUMP转储文件,先提交给微软的Symbol 服务器进行编译,因为DUMP文件缺省是一些二进制的编码,我们普通人是看不通的,要把它编译成我们能识别的代码,其实这里的Symbol File Path里面就是微软Symbol 服务器的地址,这里我有一篇微软KB来解释使用 Microsoft Symbol Server 获取调试符号文件。 [url]http://support.microsoft.com/kb/311503[/url] 。我下面就给大家来SHOW一下,我把我操作系统下生成的一个MINI Dump文件进行简单的调试,并给大家看看Windbg是如何工作的。
打开一个Crash Dump文件
在C:\windows\minidump\下生成了一个64KB的文件,后缀名为.dmp格式
Windbg自动加载此Dump文件,此时正在连接微软的Symbol服务器
Dump文件已经被加载成功,并已经正确的连接上了微软的Symbol服务器了
此时,我们在下面的输入框中输入!analyze -v 参数
Windbg会自动的帮我们进行简单的文件分析,并生成一些对我们IT人员来说有价值的调试信息,比如堆栈信息,处理对象,映像名称等,对我们IT管理员来说只要看看Image_Name就可以了,通常这里会出现一个文件名称,比如驱动文件名称等,我们就可以初步判断蓝屏可能是由一些第三方驱动错误所导致的,这样我们就可以在系统下删除这个文件进行尝试。
我们还可以输入KD或者KC的命令进行底层堆栈的排错,可能这边一般人会感觉痛苦了,这需要微软的系统开发人员才可能达到的水平。
好了,就介绍到这里了,感觉有点像是介绍微软操作系统内核知识一样,这个工具希望大家多研究研究,这个工具是有帮助文档的,大家可以对照文档进行调试,并使用相应的命令。
Technorati 标签: windows