手握利器,直面“蓝脸”
——使用WinDbg抗击系统崩溃
人有的时候都会闹情绪,更何况是机器呢。Windows有时候也会跟我们闹闹情绪,
小则是“应用程序遇到问题需要关闭”,搞不好还可能给您脸色看看。但是,这脸色
可不是红的白的,而是一张“蓝脸”,您见过吗?首先,我们介绍以下三个重要的问
题:
一、到底什么是“蓝脸”?
这里指的就是大家经常称之为“蓝屏”、“系统崩溃”之类的东西,外国人又叫它BSO
D(Blue Screen of Death)。从专业的角度讲,这一术语被定义为“是指当Microsoft
Windows崩溃或停止执行(由于灾难性的错误或者内部条件阻止系统继续运行下去
)时所显示的蓝色屏幕”。而我们平常所说的“系统崩溃(system
crash)”或者“内核错误(kernel error)”抑或“停止错误(Stop
error)”的专业术语为“程序错误检查(Bug Check)”。
二、为什么一定要给您“蓝脸”?
一旦遇上系统蓝屏崩溃,大多数的人都会以为Windows不行了所以就瘫痪了,有点
罪魁祸首是Windows或者Windows不够强悍、不够稳定的意思。可是,Windows在
默默地喊冤您知道吗?要知道,每当有内核模式设备驱动程序或者子系统引发了一
个非法异常,Windows就会面临这个艰难的抉择,虽然Windows最终还是选择了崩
溃,但是这并不代表它就不能够忽略该异常,让设备驱动程序或者子系统继续往下
执行。Windows之所以要选择“亡我”,是因为它不知道该错误是否能被隔离出来从
而不伤害系统的其它程序与数据,或者该组件将来是否能够恢复正常,而且,Win
dows深知,这个异常更有可能来源于更深层的问题,比如由于内存的常规破坏(Ge
neral
Corruption),或者由于硬件设备不能正常工作。允许系统继续运行可能导致更多的
异常,而且,存储在磁盘或其他外设中的数据可能也会遭受破坏。Windows意识到
,这样做的风险太大了,为了您的程序、数据安全与完整,为了将您的损失在第一
时间减小至最低,Windows于是忍痛做出了自我牺牲……
三、怎样给出“蓝脸”?
当系统检测到引发崩溃的致命错误时,Windows自己执行崩溃函数“KeBugCheckEx
”。该函数接受一个停止代码(STOP Code,也称为错误检查码“Bug Check
Code”),以及四个根据停止代码来解释的参数(下文中会有图例)。在调用KeBugC
heckEx之后,首先该系统所有处理器上的所有中断将被屏蔽,然后系统将显示器切
换到低分辨率的VGA图形模式(因为这是所有Windows平台显卡均支持的通用模式
),绘制一个蓝色背景,然后显示此停止代码,并且后面紧跟一些对用户诊断错误
评论0