这个蓝屏是什么意思?

蓝屏死机(缩写为BSoD)是指微软Windows操作系统在无法从系统错误中恢复时显示的屏幕图像。

◆错误分析:通常是由故障驱动引起的(如罗技MouseWare 9.10和罗技鼠标9.24驱动)。同时,有缺陷的内存、损坏的虚拟内存文件和一些软件(如多媒体软件、杀毒软件、备份软件和DVD播放器软件)也会导致这种错误。

◇解决方法:检查最新安装或升级的驱动(如果蓝屏出现类似“acpi.sys”的文件名,肯定是驱动问题)和软件;测试内存是否有问题;进入“恢复控制台”,到虚拟内存页面文件Pagefile.sys所在的分区,执行“del pagefile.sys”命令删除页面文件;然后在页面文件所在的分区执行“chkdsk /r”命令;进入Windows后重置虚拟内存。如果你在上网的时候遇到这个蓝屏,而且你只是在下载和上传很多数据(比如网游和BT下载),那应该是网卡的驱动,你需要升级它的驱动。WinDbg是免费软件,其微软官方下载地址指的是延伸阅读。具体项目是为Windows 32/64位版本安装调试工具。

使用WinDbg分析崩溃时的内存转储文件的前提是,您希望系统在崩溃时自动生成一个内存转储文件,如下所示:

1.单击开始,然后单击运行。

2.类型controlsysdm.cpl。

复制代码

,然后单击确定。您将打开系统属性,请切换到高级选项卡。结果如下图所示:

3.在高级选项卡上,单击启动和恢复部分中的设置。这将打开启动和恢复对话框,如下图所示:

4.在调试信息列表中选择“小内存转储(64 KB)”或“核心内存转储”,这样系统崩溃时会自动生成相应的内存转储文件。如果您不希望蓝屏只是闪烁,而是希望在手动重新启动计算机之前清楚地看到它,请清除“系统故障”部分中自动重新启动(R)项目前的复选框。然后单击确定。

5.在启动和恢复对话框中,单击确定。

6.单击确定关闭系统属性对话框。

7.在系统设置更改对话框中,如果要立即重新启动计算机,请单击是;如果希望以后重新启动计算机,请单击“否”。

注意:?

Vista用户也请这样做。?对于原操作系统,以上设置为默认(禁止自动重启除外)。?对于第4点中的书面调试信息列表的内容,给出以下参考解释:

(以上三个转储文件的大小依次增加,它们之间的比较超出了本文的范围。作者只建议设置为“小内存转储”或“核心内存转储”,一般错误“小内存转储”就够了。如果不能完全分析,请选择“核心内存转储”。对于数据的丰富性,也可以直接选择“核心内存转储”,但我强烈推荐完全内存转储。)

值得注意的是,为了确保在崩溃时自动生成内存转储文件,您可能还需要启用虚拟内存分页文件。特别是,当您选择记录核心内存转储时,您必须启用虚拟内存分页文件,并且因为核心内存转储文件的大小取决于操作系统和该机器上所有活动驱动程序已经分配的内核模式内存量,所以没有好的方法来预测核心内存转储的大小。下表仅给出了这种情况下的参考虚拟内存大小设置值:

另外,除了页面文件占用的磁盘空间,内存转储文件(*。DMP)应该有足够的空闲空间来提取这个转储文件,否则它将“未生成”(实际上丢失)。

设置好这些设置后,一旦你的系统出现蓝屏死机,系统会在上述设置中选择的对应内存转储文件类型下的对应目录下生成一个转储文件。你要做的就是马上拿出利器——启动WinDbg进行分析。

笔者在这里用一个例子来详细说明,这个例子包含了WinDbg调试蓝屏时使用的一些命令。这些命令不再另行安排,阅读时请注意记忆。

首先,您需要配置WinDbg将使用的调试符号文件的位置。什么是调试符号文件?符号文件是随着DLL文件或EXE文件的建立而生成的,这些文件为可执行文件和动态链接库(DLL)中包含的函数提供了空间。此外,符号文件还可以表示到故障点的函数调用路线图。当我们使用各种微软工具调试应用程序时,必须要有符号信息,这样才能正确分析问题的根源。那么我们如何设置调试符号文件的位置呢?我们可以从微软官方网站(都在WinDbg下载页面)下载完整的符号文件包,也可以使用微软符号服务器。我推荐后者,因为分析中使用的符号文件有限。使用后者可以使程序自动下载,既节省了时间,又保证了符号文件是最新的、正确的。在WinDbg中点击“文件”菜单,选择“符号文件路径……”,在打开的对话框中输入。

复制代码

然后点击“确定”按钮。当然,另一个步骤是再次点击“文件”菜单,选择“保存工作区”来保存当前的设置。

设置符号文件后,您可以分析内存转储文件。点击“文件”菜单,这次选择“打开崩溃转储…”,然后通过文件打开对话框打开生成的内存转储文件进行分析。在本例中,设置了核心内存转储类型,因此您应该导航到“%SystemRoot%”(即系统盘的Windows文件夹下)并打开内存。DMP档案。但是我已经转移到“E:\内存转储\内存。DMP”,所以在下面的图片中,你会看到这个地址。这时WinDbg会滚动显示一些信息,感觉有点悬,直到从微软符号文件服务器下载完分析这个崩溃文件所需的所有符号文件。

在上图中,我们看到的是调试器命令窗口(符号文件已经加载并准备就绪)。我们先来看看底部的6区。这个小矩形条就是WinDbg的命令入口,分为两个区域,左边显示“0: KD >”。是提示区,右边空白区是命令输入区。当这个窗口刚刚打开,符号文件还没有下载/加载时,提示区什么都不会显示,命令输入区会显示“Debuggee not connected”。在符号加载之前,窗口中显示的最后一行“Followup: MachineOwner”将变为空闲。空闲时会出现类似上图的情况。为什么说类似?因为这个idle standby提示根据调试类型和电脑处理器的硬件配置不同,比如在这种情况下进行内核调试,所以显示“KD >”。(内核调试),系统是多核处理器,所以在“KD >”之前还显示了一个“0:”表示当前位于编号为0的处理器中。执行一个命令后,如果该命令需要处理更多的任务(如"!Analyze -v”),提示区在繁忙状态下会显示为“*BUSY*”。一旦在这种状态下显示,无论你输入什么命令,都不会立即执行,而是在空闲时延迟执行。

如上图所示,打开的内存转储文件的物理路径会显示在图中的1区域;区域2显示了当前加载的符号文件的位置,在这种情况下表示它是从微软服务器下载的;区域3***有三行,显示系统信息。第一行表示系统是Windows XP,内核版本是2600(SP3),有两个多处理器(32位)。第二行表示系统类型为NT系统和客户端系统,第三行表示系统的详细版本标识。4***区有两条线路。第一行表示内存转储文件生成的时间,即系统崩溃的具体时间。在本例中(这是去年65438+2月获得的一个崩溃转储文件,现在用作本例的说明),是周六(星期六),65438+2月27日(十二月),22: 56: 3655。区域5是一个关键错误信息,它的第一行仅在加载符号文件时显示。在这种情况下,它告诉我们“对于BaseTDI。SYS文件,该模块已加载,但无法为其加载符号文件。如果之前配置了正确的符号文件路径,它会告诉我们BaseTDI。SYS不是微软的文件,而是第三方的驱动文件,这很可能是错误的原因,值得注意,但需要进一步分析。5区的第二行是WinDbg自动分析的结果,告诉我们崩溃的原因(很可能是由:)很可能是HookUrl.sys文件。一般情况下,这是错误的罪魁祸首,但也有很多例外。最典型的就是在这里显示一个微软自己的文件。你要注意了。为了避免滥杀无辜,最好能进一步分析,看看坠机最后时刻涉及到哪些模块,这样才能保证审判正确!用于进一步分析的命令可以从“!分析-v”开始。

我们可以在命令输入区域手动键入命令

!分析-v

复制代码

,也可以在上图7区显示的位置点击蓝色命令。之后提示区会显示为“*BUSY*”,WinDbg会分析一段时间,直到显示结果,再次转为空闲状态。让我们来解释一下“的实现!analyze -v之后显示的各种结果:

自动分析后,WinDbg可能会在上图1区域显示的第一行显示错误检查解释,第二行给出详细解释。从图中的信息可以看出,这个错误是由于“队列工作项完成前卸载了驱动程序”造成的。这个“driver _ unloaded _ without _ canceling _ pending _ operations”应该是蓝屏上面显示的错误描述,下面的参数1~4是蓝屏显示时stop代码后面的四个参数。图中2区显示的BUGCHECK_STR是WinDbg中的分类bug检查之一,这里是0xCE,也是stop代码的分类缩写,我们在命令输入区执行。

。错误检查

复制代码

命令,可以得到stop代码及其参数,与上图中1区域和蓝屏的信息一致。在此示例中,可以获得以下结果:

0:KD & gt;。错误检查

错误检查代码000000CE

参数BAC B0 a 4 e 00000008 BAC B0 a 4 e 00000000

通过在错误检查代码值前添加“0x”,我们可以在蓝屏上看到消息“* * * stop:0x 0000000 ce(bacb0a4e,0000008,BAC B0 a 4 e,000000)”。当然,如果您想了解更多有关此错误的信息,可以在Microsoft在线帮助和支持网站上搜索字符串“0x000000CE”,然后您可以使用上图中区域2中的BUGCHECK_STR值“0xCE”来执行它。

。hh错误检查0xCE

复制代码

命令,单击打开窗口左栏右下角的“显示”按钮。如果您想在WinDbg中显示一个停止代码或错误检查类的详细描述(以这个错误为例),请键入命令。

!分析-显示0x000000CE

复制代码

或者

!分析-显示000000CE

复制代码

,也可以是

!分析-显示0xCE

复制代码

。3区显示的是二审判决的重要信息——线程栈信息。请特别注意红框中的部分,第一行是“警告:帧IP不在任何已知模块中。以下帧可能是错误的。表示“警告:堆栈帧IP(InstructionPtr,仅限x86处理器,用于确定帧堆栈回撤的指令指针)在任何已知模块中都不存在,后续帧可能有错误”。对这一含义的解释超出了本文的范围。作者只告诉你这一行下面一行右边的模块是系统蓝屏崩溃时最后使用的模块(除了Windows内核最后调用KeBugCheckEx牺牲自己,也就是警告文字上面的三行),经常导致崩溃!让我们仔细看看。如果你知道堆栈的数据结构或者Windows的内存分配机制,你应该知道当Windows为线程分配额外的内存时,它是从高地指向低地址的。也就是说我们要从下往上看蓝色区域3的堆栈信息,就是系统崩溃前一刻内核态函数的调用和转移。例如,在这种情况下,系统内核执行器(nt!也就是Ntoskrnl.exe)通过函数IopfCallDriver调用BaseTDI,然后BaseTDI调用Hooke rurl . sys(unloaded _这个词的意思是卸载),然后屏幕就蓝屏了。然后在这最后的时刻,涉及到了两个非Windows内核模块——base TDI和HookUrl.sys。之所以这样“二审判决”是为了避免一种情况——万一HookUrl.sys和BaseTDI是两家公司或者两个软件的模块,最后加载的HookUrl.sys是没有问题的。该错误是因为BaseTDI向HookUrl.sys传递了错误的格式或损坏或非法的参数信息,而HookUrl.sys接受了这些无效数据,导致了崩溃。如果不看线程栈,我们就按照前面的“可能原因by: hook URL”来判断。sys”,而我们很可能会滥杀无辜,让凶手逍遥法外。只有通过线程栈才能发现另一个驱动BaseTDI也参与其中。(在应用崩溃而不导致系统崩溃的调试分析中,“可能原因:”在WinDbg的自动分析结果中几乎总是错误的,因为它处于用户模式。在这种情况下,使用!Thread命令不能显示任何信息,因为这个命令只对内核崩溃调试有效。但是,kb命令不能显示任何有用的信息。只有用“~*kb”详细显示所有线程栈,才能找到问题的根源,有时还需要其他命令,本文不讨论)。

当然,如果你精通的话,你觉得没必要用”!Analyze -v "命令,可以直接使用。

!线

复制代码

或者

千字节

复制代码

该命令显示核心线程堆栈信息,以进行第二次判断。现在,嫌疑人的目标是BaseTDI和HookUrl.sys,现在,我们来看看他们是什么,是哪个公司,是哪个程序模块。(从之前不能从微软服务器自动加载符号文件就可以知道他们一定是第三方驱动。)

使用命令

lm kv m Basetdi *

复制代码

(使用lm (List Module)命令、kernel K选项、detailed V选项和参数m,以及包含通配符*的字符串BaseTDI,列出当时在内核模式下加载的包含字符BaseTDI的所有驱动程序文件详细信息。用通配符代替完整的文件名后缀可以避免信息的限制,这样我们可能会找到多个相关的模块来提供更多的诊断线索),我们得到如下结果:

从图中的蓝框中,我们可以看到只有一个名为BaseTDI的文件。SYS,该文件的路径位于System32\Drivers下,属于名为“产品名称:瑞星PFW (PFW =个人防火墙)”的程序组件,软件公司的注册商标为“LegalTrademarks:瑞星”。如果不知道文档的英文描述信息,可以百度一下。当然,作者没有突出显示的信息(如文件时间戳、版本、校验和等。)也很有用。例如,如果您查看文件版本,您可能会发现软件已经提供了一个更新的文件来解决这个问题。同样,我们使用

lm kv m hookurl*

复制代码

在内核模式下显示包含HookUrl的文件及其详细信息。结果如下:

该图是一个不令人满意的结果,因为如突出显示的部分所示,这个模块没有被加载,所以没有记录任何信息。但是我们有百度,不用担心,你看看百度就知道了。搜了一下HookUrl.sys,发现这也是瑞星个人防火墙的一个文件。这个案例其实就是著名的“瑞星个人防火墙升级到2009版时触发蓝屏”。可以通过关键词“瑞星防火墙2009升级导致蓝屏”搜索百度。截至目前,瑞星官方并未对此事件给出任何官方回复。虽然不是每个用户都有这个问题,但是很多用户都反映过,瑞星也不承认这是软件缺陷。只有官方卡卡论坛上一个不知道是不是工作人员的人发帖要求大家遇到蓝屏时上传内存转储文件。说到这里,我又对瑞星失望了,不过可以看出分析蓝屏内存转储文件有多有用!

在这里,我还想给出两个可能用来获取更多信息的命令。一个是

!进程0 0

复制代码

,可以列出当时运行的所有进程的技术信息;另一个是

!伏特计

复制代码

可以显示当时虚拟内存的使用情况,对于分析系统是否耗尽了虚拟内存、换页内存池还是不换页内存池,结合进程列表查找可能的内存泄漏错误非常有用,但不在本文讨论范围内。

最后,我们来看看在以下两种特殊情况下,如何使用WinDbg进行调试和分析:

第一种情况是系统挂起,即“系统崩溃”和“系统无响应”。在这种情况下,系统无法自动生成内存转储文件,你也不可能操作本地软件找出是什么东西挂起了系统。此时,我们需要手动使系统崩溃,以生成内存转储文件。为此,在系统挂起之前,打开注册表编辑器并导航到。

HKEY _ LOCAL _ MACHINE \ System \ current control set \ Services \ I 8042 port \ Parameters

复制代码

在该项下,创建一个名为。

CrashOnCtrlScroll

复制代码

的DWORD键值(注意大小写),并将其设置为1,然后重新启动以应用此更改。一旦系统挂起,您可以通过按住右Ctrl键并按两次ScrollLock键来生成停止代码为0x 000000 E2(manually _ initiated _ crash)的手动崩溃。得到内存转储文件后,按照上面的方法进行分析。请注意,这种方法对于插入USB端口的USB键盘无效。(笔记本电脑很多键盘都是通过PS/2接口连接的,所以有效。)

第二种情况,进不了系统就会自动崩溃,也无法提取内存转储文件。在这种情况下以及有特定需要时,可以采用双机调试的方法。我们把崩溃的机器称为“目标机器”,把用来连接“目标机器”进行调试的机器称为“调试主机”。调试主机必须安装WinDbg。

首先,我们需要在两台机器之间建立连接。在WinDbg的新版本中,有三种方法可以连接到目标机器。第一种方式是通过COM口连接,使用Null-Modem,即COM对接线——两端带孔的RS232线;第二种是使用IEEE 1394线缆连接,但是这种连接需要两台机器运行相同版本的至少Windows XP系统;第三种方式是使用专用的USB 2.0调试线缆连接,不是普通的USB线缆,而是内置硬件芯片支持调试的线缆,而且这种方式要求目标机至少运行Windows Vista。使用这三种连接方式进行双机调试,需要在目标机上进行相应的设置调整。有关详细信息,请参考WinDbg帮助文件。这里只讨论第一种连接模式的设置,因为这是XP及以上系统默认支持的最简单的模式。此时,我们假设两台机器已经用COM电缆连接起来。

其次,在调试主机上启动WinDbg并准备好符号文件后,我们展开文件菜单并选择内核调试…,这将打开以下内核调试对话框:

默认情况下,打开COM连接模式的配置页。这里的“波特率”和“端口”需要根据下一步的工作模式进行配置。

最后一步,我们可以启动目标机器,在启动Windows之前按下F8,在启动菜单中选择“调试模式”。这样传输速率默认设置为19200,端口也默认设置为COM2,我们要按照上一步的这个设置点击“确定”。XP修改Boot.ini,Vista修改Bootcfg,调试指定端口和传输速率请参考WinDbg帮助文件,此处不再赘述。当目标机一起启动Windows时,信息可以显示在位于调试主机中的WinDbg中,然后按照本文介绍的方法进行调试。另外,对于上述系统挂起,也可以采用这种双机调试,还有新的命令。

。碰撞

复制代码

强制目标机在其本地硬盘生成崩溃转储,可以在系统重启时提取,当然也可以使用。

。dump /m COM.dmp

复制代码

命令在调试主机WinDbg所在的目录下生成一个名为“COM.dmp”的小内存转储文件(命令中的文件名可以改成别的)。

编辑此段落

防止电脑蓝屏的九大技巧

1定期手动备份重要的注册表文件,避免系统出错后未能及时用备份文件替换而导致不可挽回的错误。

2尽量避免非正常关机,减少重要文件的丢失。比如。vxd.dll档案。

对于普通用户来说,只要能正常运行,就不需要升级显卡和主板的BIOS和驱动,避免升级带来的危害。

定期检查优化后的系统文件,运行系统文件检查器检查文件丢失情况,校对版本。检查步骤见前面相关介绍。

5减少无用软件的安装,尽量不要手动卸载或删除程序,减少非法替换文件和文件指向错误的发生。

6如果内存不是特别大,其管理程序也很优秀,尽量避免同时运行大型程序。如果听MP3时发现有沙沙声,基本可以判断故障是内存不足造成的。

7定期使用杀毒软件进行全面扫描,清除病毒。

不要去一些不熟悉的网站,也不要点击一些网站上诱人的图片和中奖消息。

定期升级操作系统、软件和驱动程序。

再多说一点话,............慢慢来。哈╮ (╯ ▽ ╰) ╭《苦孩子》