了解电脑蓝屏的产生的原因和自主解决方法 下
操作方法
- 01
4注意事项 1。定期对重要的注册表文件进行手工备份,避免系统出错后,未能及时替换成备份文件而产生不可挽回的错误。 2。尽量避免非正常关机,减少重要文件的丢失。如,VxD ,DLL文件等,硬盘出现损伤或系统引导文件丢失。 3。对普通用户而言,只要能正常运行,没有必要去升级显卡、主板的BIOS和驱动程序,避免升级造成的危害。 4。定期检查优化系统文件,运行“系统文件检查器”进行文件丢失检查及版本校对。检查步骤参见前面相关介绍。 5。减少无用软件的安装,尽量不用手工卸载或删除程序,以减少非法替换文件和文件指向错误的出现。 6。如果不是内存特别大和其管理程序非常优秀,尽量避免大程序的同时运行,如果你发现在听MP3时有沙沙拉拉的声音,基本可以判定该故障是由内存不足而造成的。 7。定期用杀毒软件进行全盘扫描,清除病毒。 8。不上一些不熟悉的网站,对于一些网站上的带有诱惑性的图片和一些中奖的消息,不要点击。 9。定期升级操作系统,软件和驱动。 5程序代码 5.1代码表 1 0×00000001 不正确的函数。 2 0×00000002 系统找不到指定的档案。 3 0×00000003 系统找不到指定的路径。 4 0×00000004 系统无法开启档案。 5 0×00000005 拒绝存取。 6 0×00000006 无效的代码。 7 0×00000007 储存体控制区块已毁。 8 0×00000008 储存体空间不足,无法处理这个指令。 9 0×00000009 储存体控制区块地址无效。 10 0×0000000A 环境不正确。 11 0×0000000B 尝试加载一个格式错误的程序。 12 0×0000000C 存取码错误。 13 0×0000000D 资料错误。 14 0×0000000E 储存体空间不够,无法完成这项作业。 15 0×0000000F 系统找不到指定的磁盘驱动器。 16 0×00000010 无法移除目录。 17 0×00000011 系统无法将档案移到其它的磁盘驱动器。 18 0×00000012 没有任何档案。 19 0×00000013 储存媒体为写保护状态。 20 0×00000014 系统找不到指定的装置。 21 0×00000015 装置尚未就绪。 22 0×00000016 装置无法识别指令。 23 0×00000017 资料错误(cyclic redundancy check) 24 0×00000018 程序发出一个长度错误的指令。 25 0×00000019 磁盘驱动器在磁盘找不到持定的扇区或磁道。 26 0×0000001A 指定的磁盘或磁盘无法存取。 27 0×0000001B 磁盘驱动器找不到要求的扇区。 28 0×0000001C 打印机没有纸。 29 0×0000001D 系统无法将资料写入指定的磁盘驱动器。 30 0×0000001E 系统无法读取指定的装置。 31 0×0000001F 连接到系统的某个装置没有作用。 32 0×00000020 该进程无法访问文件,因为它正由另一个进程使用。 33 0×00000021 档案的一部份被锁定,现在无法存取。 34 0×00000022 磁盘驱动器的磁盘不正确。请将%2 (Volume Serial Number: %3) 插入磁盘机%1。 35 0×00000024 开启的分享档案数量太多。 36 0×00000026 到达档案结尾。 37 0×00000027 磁盘已满。 38 0×00000032 不支持这种网络要求。 39 0×00000033 远程计算机无法使用。 40 0×00000034 网络名称重复。 41 0×00000035 网络路径找不到。 42 0×00000036 网络忙碌中。 43 0×00000037 指定的网络资源或设备不可再用。 44 0×00000038 网络BIOS命令限制已经达到 45 0×00000039 网络配接卡发生问题。 46 0×0000003A 指定的服务器无法执行要求的作业。 47 0×0000003B 网络发生意外错误。 48 0×0000003C 远程配接卡不兼容。 49 0×0000003D 打印机队列已满。 50 0×0000003E 服务器的空间无法储存等候打印的档案。 51 0×0000003F 等候打印的档案已经删除。 52 0×00000040 指定的网络名称无法使用。 53 0×00000041 拒绝存取网络。 54 0×00000042 网络资源类型错误。 55 0×00000043 网络名称找不到。 56 0×00000044 超过区域计算机网络配接卡的名称限制。 57 0×00000045 超过网络BIOS 作业阶段的限制。 58 0×00000046 远程服务器已经暂停或者正在起始中。 59 0×00000047 由于联机数目已达上限,此时无法再联机到这台远程计算机。 60 0×00000048 指定的打印机或磁盘装置已经暂停作用。 61 0×00000050 档案已经存在。 62 0×00000052 无法建立目录或档案。 63 0×00000053 INT 24 失败 64 0×00000054 处理这项要求的储存体无法使用。 65 0×00000055 近端装置名称已经在使用中。 66 0×00000056 指定的网络密码错误。 67 0×00000057 参数错误。 68 0×00000058 网络发生资料写入错误。 69 0×00000059 此时系统无法执行其它行程。 使用windows出现蓝色屏幕是经常的事,而且每每因为不清楚错误的来源而频繁重新安装系统,劳神费时。星晴吧收集了一些windows死机密码,供大家参考。 5.2代码含义 1,0x0000000A:IRQL_NOT_LESS_OR_EQUAL ◆错误分析:主要是由问题的驱动程序、有缺陷或不兼容的硬件与软件造成的。从技术角度讲, 表明在内核模式中有级别进程请求(IRQL)访问其没有权限访问的内存地址。 ◇解决方案:请用前面介绍的解决方案中的2、3、5、8、9方案尝试排除, 2、0x00000012:TRAP_CAUSE_UNKNOWN ◆错误分析:如果遇到这个错误信息,那么很不幸, 应为KeBudCheck分析的结果是错误原因 未知。 ◇解决方案:既然微软都帮不上忙,就得靠自己了, 请仔细回想这个错误是什么时候出现的; 第一次发生时你对系统做了哪些操作; 发生时正在进行什么操作, 从这些信息中找出可能的原因,从而选择相应解决方案尝试排除。 3、0x0000001A:MEMORY_MANAGEMENT ◆错误分析:这个内存管理错误往往是由硬件引起的, 比如: 新安装的硬件、内存本身有问题等, ◇解决方案:如果是在安装Windows时出现,有可能是由于你的电脑达不到安装Windows的最小内存和磁盘要求。 4、0x0000001E:KMODE_EXCEPTION_NOT_HANDLED ◆错误分析:Windows内核检查到一个非法或者未知的进程指令,这个停机码一般是由问题的内存或是与前面0x0000000A相似的原因造成的, ◇解决方案: ⑴硬件兼容有问题:请对照前面提到的最新硬件兼容性列表, 查看所有硬件是否包含在该列表中。 ⑵有问题的设备驱动、系统服务或内存冲突和中断冲突: 如果在蓝屏信息中出现了驱动程序的名字,请试着在安装模式或者故障恢复控制台中禁用或删除驱动程序, 并禁用所有刚安装的驱动和软件, 如果错误出现在系统启动过程中,请进入安全模式, 将蓝屏信息中所标明的文件重命名或者删除。 ⑶如果错误信息中明确指出Win32K,sys: 很有可能是第三方远程控制软件造成的,需要从故障恢复控制台中将对该软件的服务关闭。 ⑷在安装Windows后第一次重启时出现:最大嫌疑可能时系统分区的磁盘空间不足或BIOS兼容有问题, ⑸如果是在关闭某个软件时出现的:很有可能时软件本生存在设计缺陷, 请升级或卸载它。 5、0x00000023:FAT_FILE_SYSTEM 0x00000024:NTFS_FILE_SYSTEM ◆错误分析:0x00000023通常发生在读写FAT16或者FAT32文件系统的系统分区时,而0x00000024则是由于NTFS,sys文件出现错误(这个驱动文件的作用是容许系统读写使用。(NTFS文件系统的磁盘), 这两个蓝屏错误很有可能是磁盘本身存在物理损坏, 或是中断要求封包(IRP)损坏而导致的。其他原因还包括:硬盘磁盘碎片过多; 文件读写操作过于频繁,并且数据量非常大或者是由于一些磁盘镜像软件或杀毒软件引起的, ◇解决方案: 第一步:首先打开命令行提示符,运行"Chkdsk /r"(注:不是CHKDISK,感觉象这个, 但是它们所指的内容是不一样的)命令检查并修复硬盘错误,如果报告存在坏道(Bad Track),请使用硬盘厂商提供的检查工具进行检查和修复。 第二步:接着禁用所有即使扫描文件的软件, 比如:杀毒软件、防火墙或备份工具, 第三步:右击C:winntsystem32driversastfat,sys文件并选择"属性",查看其版本是否与当前系统所使用的Windows版本相符合。(注:如果是XP,应该是C:windowssystem32driversastfat,sys) 第四步:安装最新的主板驱动程序,特别IDE驱动, 如果你的光驱、可移动存储器也提供有驱动程序, 最好将它们升级至最新版。 6、0x00000027:RDR_FILE_SYSTEM ◆错误分析:这个错误产生的原因很难判断,不过Windows内存管理出了问题很可能会导致这个停机码的出现, ◇解决方案:如果是内存管理的缘故, 通常增加内存会解决问题。 7、0x0000002EATA_BUS_ERROR ◆错误分析:系统内存存储器奇偶校验产生错误,通常是因为有缺陷的内存(包括物理内存、二级缓存或者显卡显存)时设备驱动程序访问不存在的内存地址等原因引起的, 另外, 硬盘被病毒或者其他问题所损伤,以出现这个停机码。 ◇解决方案: ⑴检查病毒 ⑵使用"chkdsk /r"命令检查所有磁盘分区, ⑶用Memtest86等内存测试软件检查内存。 ⑷检查硬件是否正确安装, 比如:是否牢固、金手指是否有污渍, 8、0x00000035:NO_MORE_IRP_STACK_LOCATIONS ◆错误分析:从字面上理解,应该时驱动程序或某些软件出现堆栈问题。其实这个故障的真正原因应该时驱动程序本生存在问题, 或是内存有质量问题, ◇解决方案:请使用前面介绍的常规解决方案中与驱动程序和内存相关的方案进行排除。 9、0x0000003F:NO_MORE_SYSTEM_PTES ◆错误分析:一个与系统内存管理相关的错误,比如:由于执行了大量的输入/输出操作, 造成内存管理出现问题:有缺陷的驱动程序不正确地使用内存资源; 某个应用程序(比如:备份软件)被分配了大量的内核内存等, ◇解决方案:卸载所有最新安装的软件(特别是哪些增强磁盘性能的应用程序和杀毒软件)和驱动程序。 10、0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS ◆错误分析:通常是由硬件驱动程序引起的, ◇解决方案:卸载最近安装的驱动程序。这个故障很少出现,目前已经知道的是, 在使用这家公司的某些软件时会出现,其中的罪魁就是Falstaff,sys文件。(作者难道不怕吃官司嘛, 把公司网址公布) 11、0x00000050: PAGE_FAULT_IN_NONPAGED+AREA ◆错误分析:有问题的内存(包括物理内存、二级缓存、显存)、不兼容的软件(主要是远程控制和杀毒软件)、损坏的NTFS卷以及有问题的硬件(比如: PCI插卡本身已损坏)等都会引发这个错误, ◇解决方案:请使用前面介绍的常规解决方案中与内存、软件、硬件、硬盘等相关的方案进行排除。 如果电脑中安装有maxdos(或是用maxdos的启动盘)也可以在命令模式下直接删除C盘的页面文件。 12、0x00000051:REGISTRY_ERROR ◆错误分析:这个停机码说明注册表或系统配置管理器出现错误,由于硬盘本身有物理损坏或文件系统存在问题, 从而造成在读取注册文件时出现输入/输出错误, ◇解决方案:使用"chkdsk /r"检查并修复磁盘错误。 13、0x00000058:FTDISK_INTERNAL_ERROR ◆错误分析:说明在容错集的主驱动发生错误, ◇解决方案:首先尝试重启电脑看是否能解决问题,如果不行, 则尝试"最后一次正确配置"进行解决。 14、0x0000005E:CRITICAL_SERVICE_FAILED ◆错误分析:某个非常重要的系统服务启动识别造成的, ◇解决方案:如果是在安装了某个新硬件后出新的,可以先移除该硬件, 并通过网上列表检查它是否与Windows 2K/XP兼容,接着启动电脑, 如果蓝屏还是出现,请使用"最后一次正确配置"来启动Windows,如果这样还是失败, 建议进行修复安装或是重装。 15、0x0000006F:SESSION3_INITIALIZATION-FAILED ◆错误分析:这个错误通常出现在Windows启动时,一般是由有问题的驱动程序或损坏的系统文件引起的, ◇解决方案:建议使用Windows安装光盘对系统进行修复安装。 16、0x00000076ROCESS_HAS_LOCKED_PAGES ◆错误分析:通常是因为某个驱动程序在完成了一次输入/输出操作后, 没有正确释放所占有的内存 ◇解决方案: 第一步:点击开始-->;运行:regedt32,找到[HKLMSYSTEMCurrentcontrol setcontrolsession managermemory management],在右侧新建双字节值"TrackLockedPages",值为1, 这样Windows便会在错误再次出现时跟踪到是哪个驱动程序的问题。第二步:如果再次出现蓝屏, 那么错误信息会变成:STOP:0x0000000CB(0xY,0xY,0xY,0xY)DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS其中第四个"0xY"会显示为问题驱动程序的名字, 接着对其进行更新或删除,第三步:进入注册表,删除添加的"TrackLockedPages", 17、0x00000077:KERNEL_STACK_INPAGE_ERROR ◆错误分析:说明需要使用的内核数据没有在虚拟内存或物理内存中找到。这个错误常常是磁盘有问题, 相应数据损坏或受到病毒侵蚀, ◇解决方案:使用杀毒软件扫描系统; 使用"chkdsk /r"命令检查并修复磁盘错误,如不行则使用磁盘厂商提供的工具检查修复。 18、0x0000007A:KERNEL_DATA_INPAGE_ERROR ◆错误分析:这个错误往往是虚拟内存中的内核数据无法读入内存造成的, 原因可能是虚拟内存页面文件中存在坏簇病毒、磁盘控制器出错、内存有问题。 ◇解决方案:首先用升级为最新病毒库杀毒软件查杀病毒, 如果信息中还有0xC000009C或0xC000016A代码,那么表示是坏簇造成的, 并且系统的磁盘检测工具无法自动修复,这时要进入"故障恢复控制台",用"chkdsk /r"命令进行手动修复, 19、0x0000007B:INACESSIBLE_BOOT_DEVICE ◆错误分析:Windows在启动过程中无法访问系统分区或启动卷。一般发生在更换主板后第一次启动时, 主要是因为新主板和旧主板的IDE控制器使用了不同芯片组造成的, 有时也可能是病毒或硬盘损伤所引起的。 ◇解决方案:一般只要用安装光盘启动电脑,然后执行修复安装即可解决问题, 对于病毒则可使用DOS版的杀毒软件进行查杀(有kv2005DOS版下载), 如果是硬盘本身存在问题, 请将其安装到其他电脑中,然后使用"chkdsk /r"来检查并修复磁盘错误。如果是BIOS设置问题,只要将BIOS设置IDE模式即可, 20、0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED ◆错误分析:系统进程产生错误,但Windows错误处理器无法捕获。其产生原因很多, 包括:硬件兼容性、有问题的驱动程序或系统服务、或者是某些软件, ◇解决方案:请使用"事件查看器"来获取更多的信息,从中发现错误根源。(发现好像不是解决哦, 看来这里大家要自力更生了!) 21、0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP ◆错误分析:一般是由于有问题的硬件(比如:内存)或某些软件引起的, 有时超频也会产生这个错误。 ◇解决方案:用检测软件(比如:Memtest86)检查内存,如果进行了超频, 请取消超频, 将PCI硬件插卡从主板插槽拔下来,或更换插槽。另外, 有些主板(比如:nForce2主板)在进行超频后,南桥芯片过热也会导致蓝屏, 此时为该芯片单独增加散热片往往可以有效解决问题, 22、0x00000080:NMI_HARDWARE_FAILURE ◆错误分析:通常是有硬件引起的。(似乎蓝屏与硬件错误有不解之缘) ◇解决方案:如果最近安装了新硬件,请将其移除, 然后试试更换插槽和安装最新的驱动程序,如果升级了驱动程序, 请恢复后原来的版本; 检查内存金手指是否有污染和损坏; 扫描病毒; 运行"chkdsk /r"检查并修复磁盘错误; 检查所有硬件插卡已经插牢, 如果以上尝试都无效果,就得找专业的电脑维修公司请求帮助了。 23、0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED ◆错误分析:内核级应用程序产生了错误, 但Windows错误处理器没有捕获, 通常是硬件兼容性错误。 ◇解决方案:升级驱动程序或升级BIOS, 24、0x0000009C:MACHINE_CHECK_EXCEPTION ◆错误分析:通常是硬件引起的。一般是因为超频或是硬件存在问题(内存、CPU、总线、电 源), ◇解决方案:如果进行了超频,请降下CPU原来频率,检查硬件。 25、0x0000009DRIVER_POWER_STATE_FAILURE ◆错误分析:往往与电源有关系, 常常发生在与电源相关的操作,比如:关机、待机或休睡, ◇解决方案:重装系统, 如果不能解决,请更换电源。 26、0x000000A5:ACPI_BIOS_ERROR ◆错误分析:通常是因为主板BIOS不能全面支持ACPI规范, ◇解决方案:如果没有相应BIOS升级, 那么可在安装Windows 2K/XP时,当出现"press F6 if you need to install a third-party SCSI or RAID driver"提示时, 按下F7键,这样Windows便会自动禁止安装ACPI HAL,而安装Standard PC HAL, 27、0x000000B4:VIDEO_DRIVER_INIT_FAILURE ◆错误分析:这个停止信息表示Windows因为不能启动显卡驱动, 从而无法进入图形界面, 通常是显卡的问题,或者是存在与显卡的硬件冲突(比如:与并行或串行端口冲突), ◇解决方案:进入安全模式查看问题是否解决, 如果可以,请升级最新的显卡驱动程序, 如果还不行,则很可能是显卡与并行端口存在冲突, 需要在安全模式按下WIN+break组合键打开"系统属性",在硬件-->;设备管理器中找到并双击连接打印的LPT1端口的选项, 在"资源"选项卡中取消"使用自动配置"的勾选,然后将"输入/输出范围"的"03BC"改为"0378", 28、0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY ◆错误分析:某个驱动程序试图向只读内存写入数据造成的。通常是在安装了新的驱动程序, 系统服务或升级了设备的固件程序后, ◇解决方案:如果在错误信息中包含有驱动程序或者服务文件名称,请根据这个信息将新安装的驱动程序或软件卸载或禁用。 29、0x000000C2:BAD_POOL_CALLER ◆错误分析:一个内核层的进程或驱动程序错误地试图进入内存操作, 通常是驱动程序或存在BUG的软件造成的。 ◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除, 30、0x000000CERIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS ◆错误分析:通常是由有问题的驱动程序或系统服务造成的。 ◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除, 31、0x000000D1RIVER_IRQL_NOT_LESS_OR_EQUAL ◆错误分析:通常是由有问题的驱动程序引起的(比如罗技鼠标的Logitech MouseWare 9,10和9,24版驱动程序会引发这个故障), 同时,有缺陷的内存、损坏的虚拟内存文件、 某些软件(比如多媒体软件、杀毒软件、备份软件、DVD播放软件)等也会导致这个错误。 ◇解决方案:检查最新安装或升级的驱动程序(如果蓝屏中出现"acpi,sys"等类似文件名,可以非常肯定是驱动程序问题)和软件; 测试内存是否存在问题; 进入"故障恢复控制台",转到虚拟内存页面文件Pagefile,sys所在分区, 执行"del pagefile,sys"命令,将页面文件删除; 然后在页面文件所在分区执行"chkdsk /r"命令;进入Windows后重新设置虚拟内存。如果在上网时遇到这个蓝屏, 而你恰恰又在进行大量的数据下载和上传(比如:网络游戏、BT下载),那么应该是网卡驱动的问题, 需要升级其驱动程序, 32、0x000000EA:THREAD_STUCK_IN_DEVICE_DRIVER ◆错误分析:通常是由显卡或显卡驱动程序引发的。 ◇解决方案:先升级最新的显卡驱动,如果不行, 则需要更换显卡测试故障是否依然发生, 33、0x000000ED:UNMOUNTABLE_BOOT_VOLUME ◆错误分析:一般是由于磁盘存在错误导致的,有时也建议检查硬盘连线是否接触不良, 或是没有使用合乎该硬盘传输规格的连接线,例如ATA-100仍使用ATA-33的连接线, 对低速硬盘无所谓,但高速硬盘(支持ATA-66以上)的要求较严格, 规格不对的连线有时也会引起这类没办法开机的故障。如果在修复后,还是经常出现这个错误, 很可能是硬盘损坏的前兆, ◇解决方案:一般情况下,重启会解决问题, 不管怎么样都建议执行"chkdsk /r"命令来检查修复硬盘 34、0x000000F2:HARDWAREINTERRUPT_STORM ◆错误分析:内核层检查到系统出现中断错误,比如:某个设备在完成操作后没有释放所占用的中断。通常这是由缺陷的驱动程序造成的, ◇解决方案:升级或卸载最新安装的硬件驱动程序。 35、0x00000135:UNABLE_TO_LOCATE_DLL ◆错误分析:通常表示某个文件丢失或已经损坏, 或者是注册表出现错误, ◇解决方案:如果是文件丢失或损坏,在蓝屏信息中通常会显示相应的文件名, 你可以通过网络或是其他电脑找到相应的文件,并将其复制到系统文件夹下的SYSTEM32子文件夹中。如果没有显示文件名, 那就很有可能是注册表损坏,请利用系统还原或是以前的注册表备份进行恢复, 36、0x0000021A:STATUS_SYSTEM_PROCESS_TERMINATED ◆错误分析:用户模式子系统, 例如Winlogon或客服服务运行时子系统(CSRSS)已损坏,所以无法再保证安全性, 导致系统无法启动。有时,当系统管理员错误地修改了用户帐号权限, 导致其无法访问系统文件和文件夹, ◇解决方案:使用"最后一次正确的配置",如果无效, 可使用安装光盘进行修复安装。 37、STOP 0xC0000221 or STATUS_IMAGE_CHECKSUM_MISMATCH ◆错误分析:通常是由于驱动程序或系统DLL文件损坏造成的, 一般情况下,在蓝屏中会出现 文件名称 ,sys文件 ⒊ 将其重命名,如:XXXintelppm,sys ⒋ 重启。 1、运行在内核模式下的设备驱动程序或者操作系统函数引发了一个未被处理的异常,比如内存访问违例(由于企图写一个只读页面或者企图读一个当前未被映射的内存地址(即无效地址)而引起)。 2、调用一个内核支持例程导致了重新调度,比如当中断请求级别(IRQL)为DPC/Dispatch级别或更高级别时等待一个标记为需要等待的调度对象。 3、在DPC/Dispatch级别或更高的IRQL级别时由于数据存在于页面文件或内存映射文件中而发生了页面错误(Page Fault)。(这将要求内存管理器必须等待一个I/O操作发生。但正如上面一项所说,在DPC/Dispatch级别或更高IRQL级别上不能够进行等待,因为那将要求一次重新调度)。 4、当检测到一个内部状态表明数据已遭受破坏或者在保证数据不被破坏的情况下系统无法继续执行时,设备驱动程序或操作系统函数明确地要求系统崩溃(通过调用系统函数KeBugCheckEx)。 5、发生硬件错误,比如处理器的计算机检查异常功能(Machine Check)报告有异常或者发生不可屏蔽中断(NMI)。 在了解以上三点知识之后,相信您对Windows的大无畏牺牲精神会有所赞赏,也会原谅它的“蓝脸”了。其实,在绝大多数情况下均是第三方设备驱动程序导致了Windows的崩溃。对于Windows XP用户提交给微软在线崩溃分析(Microsoft OCA,Microsoft Online Crash Analysis)站点的内存转储文件,微软对引起崩溃的原因进行了统计分类。 5.3WinDbg WinDbg是免费软件,其下载地址参考扩展阅读,具体项目为Install Debugging Tools for Windows 32/64-bit Version。 使用WinDbg分析崩溃时的内存转储文件的前提是您要让系统在崩溃时自动生成一个内存转储文件,做法如下: 1,单击开始,然后单击运行。 2,键入 control sysdm,cpl ,然后单击确定。您将会打开系统属性,请切换到高级选项卡。结果如下图所示: 3,在高级选项卡上,在启动和故障恢复部分中单击设置。这将打开启动和故障恢复对话框,如下图所示: 4,在写入调试信息列表中,选择“小内存转储(64 KB)”或“核心内存转储”,这样系统在崩溃时将会自动生成对应的内存转储文件。如果您不想让蓝屏只闪烁一下,而是想看清楚它直到您手动重新启动计算机,请清除系统失败部分中自动重新启动(R)项目前的复选框。然后单击确定。 5,在启动和故障恢复对话框中,单击确定。 6,单击确定关闭系统属性对话框。 7,在系统设置更改对话框中,如果要立即重新启动计算机,则单击是;如果要稍后重新启动计算机,则单击否。 注:? Vista用户请类似操作。对于原版操作系统,以上设置是默认的(除了禁止自动重新启动)。对于第4点中的写入调试信息列表内容,现给出以下参照释义: (以上三种转储文件的大小依次增大,关于三者的比较不在本文讨论范围之内,笔者仅推荐设置为“小内存转储”或者“核心内存转储”,一般性错误“小内存转储”就足够了,如不能完好分析请选择“核心内存转储”。为了数据的丰富性,您也可以直接选择“核心内存转储”,但笔者强烈不推荐完全内存转储。) 值得注意的是,为了确保崩溃时自动生成内存转储文件,您可能还须启用虚拟内存页面文件。特别地,当您选择记录核心内存转储时,您必须启用虚拟内存页面文件,而且由于核心内存转储文件的大小取决于该机器上操作系统和所有活动驱动程序已经分配的内核模式内存的数量,因此没有很好的办法来预测内核内存转储的大小。下表仅给出该情况下的参考虚拟内存大小设置值: 另外,除了页面文件占用的磁盘空间,内存转储文件(*,DMP)的生成位置所在的磁盘还要有足够的空闲空间来提取这个转储文件,否则一样会“生成不了”(实际上是丢失了)。 设置好这些之后,一旦您的系统发生蓝屏崩溃,系统就会在以上设置中选中的相应内存转储文件类型下对应的目录处生成转储文件。您所要做的就是立刻拿出利器——启动WinDbg进行分析。 笔者在此将结合一个实例进行详细说明,过程中包含了WinDbg调试蓝屏用到的一些命令,这些命令将不再额外整理,请于阅读过程中注意识记。 注意事项 首先,您要配置WinDbg将要使用的调试符号文件(Symbol File)的位置。什么是调试符号文件呢?符号文件随DLL文件或者EXE文件建立时产生,提供包含在可执行文件和动态链接库(DLL) 中的函数的占位空间。此外,符号文件还可以表示达到失败点的函数调用路线图。当我们使用各种Microsoft工具调试应用程序时,必须拥有符号信息,这样才能正确分析出问题根源。那我们该如何设置调试符号文件的位置呢?我们既可以从微软官网下载完整的符号文件包(同位于WinDbg下载页面),也可以使用微软的符号文件服务器(Microsoft Symbol Server)。笔者推荐后者,因为一次分析所要用到的符号文件局限于有限的几个而已,使用后者可以让程序自动下载,既节省时间,又可以确保符号文件是最新的并且是正确的。在WinDbg中点击“File”菜单,选择“Symbol File Path …”,在打开的对话框中输入 后点击“OK”按钮即可。当然,还有一步就是再次点击“File”菜单,选择“Save Workspace”来保存当前的设置。 设置了符号文件之后,您就可以进行内存转储文件的分析了。同样点击“File”菜单,这次要选择“Open Crash Dump …”,然后通过文件打开对话框打开生成的待分析的内存转储文件。本例中设置的是核心内存转储类型,于是应该定位至“%SystemRoot%”(即系统盘Windows文件夹下),打开MEMORY,DMP文件。但是笔者已经事先将其转移至“E:Memory DumpMEMORY,DMP”,因此在后续的图片中,您看到的是这个地址。此时WinDbg会滚动显示一些信息并且会稍有挂起的感觉,直到从微软符号文件服务器下载完分析这个崩溃文件所需要的所有符号文件。 特殊情况下WinDbg调试分析 最后,我们来看看以下的两种特殊情况该如何使用WinDbg进行调试分析: 第一种情况是系统挂起,也就是“死机”、“系统没有响应”,在这种情况下,系统是根本无法自动生成内存转储文件的,而且您也不可能操作本地软件来查明是什么挂起了系统,这个时候我们需要手动让系统崩溃,以生成内存转储文件。具体做法为,在系统挂起之前,打开注册表编辑器并定位至 HKEY_LOCAL_MACHINESystemCurrentControlSetServicesi8042prtParameters ,在该项下面建立一个名为 CrashOnCtrlScroll 的DWORD类型键值(注意大小写),并将其设置为1,然后重新启动应用此更改。一旦系统挂起,就可以通过按住右边Ctrl键的同时击ScrollLock键两次来生成一个停止代码为0x000000E2(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,配制好符号文件之后,我们展开“File”菜单,选择“Kernal Debug…”,这将会打开如下的“Kernal Debugging”对话框: 默认打开的就是COM连接方式的配置页面。这里的“Baud Rate(传输速率)”以及“Port(端口)”需要根据下一个步骤的操作方式来配置。 最后一步,我们可以启动目标机,在引导Windows之前按下F8,在启动菜单中选择“调试模式”,这样,传输速率被系统默认设为19200,端口也默认被设为COM2,因此上一步骤中应该照此设置后点击“OK”。关于XP修改Boot,ini、Vista修改Bootcfg的方式启用指定端口、传输速率的调试,请参见WinDbg帮助文件,在此不再赘述。目标机一起动Windows,位于调试主机的WinDbg就能够有信息的显示,然后按照本文介绍的方法进行调试。另外,对于上面提到的系统挂起的情况,也可以采用这种双机调试,并且有新的命令 ,crash 强迫目标机在它的本地硬盘驱动器中生成一个崩溃转储,当系统重新引导以后就可以提取此转储,当然,也可以使用 ,dump /m COM,dmp 命令,在调试主机WinDbg所在目录下生成一个名叫“COM,dmp”的小内存转储文件(命令中的文件名可以改成其它的)。