蓝屏总结(二)——系统蓝屏及转储方法

目录

一、前言

二、关于page files设置

四、手动蓝屏方法

1、使用NotMyFaul Tool生成0xD1蓝屏

2、使用NMI生成0x80蓝屏

3、使用keyboard键盘生成0xE2蓝屏

4、使用WinDbg调试器

五、写在最后

六、参考资料


一、前言

        系统崩溃(system crash)也称为bugcheck或者停止错误,会在系统无法正常工作时发生蓝屏,通过CrashDump机制在系统下生成崩溃转储文件,称为系统崩溃转储文件。其中CrashDump是一种操作系统调用存储适配器驱动程序将内存内容写入转储文件的机制,在系统崩溃时相关进程会捕获系统内存记录生成内核或者完全内存转储文件(Kernel or memory dump file),这些文件通常用于crash问题的排查。

        关于系统蓝屏,分自动蓝屏和手动蓝屏两种方法,结合系统设置、注册表或者工具实现。手动蓝屏一般用于系统未自动发生蓝屏,但是需要触发蓝屏来对内存进行转储来分析问题的情况下,可通过微软工具NotMyFault、keyboard快捷键、Debugger等方式进行蓝屏触发,从而完成内存转储获取转储文件。在此之前,需要对内存转储进行设置,包括设置pagefile、开启内存转储设置。

二、关于page files设置

        Page files是硬盘上可选的隐藏系统文件,可用于备份系统崩溃转储,并扩展系统可支持的系统提交内存(“虚拟内存”)。要完成再系统崩溃期间创建故障转储文件,需要page file或者专用的转储文件向磁盘写入崩溃转储文件(Memory.dmp),因此page file或者专用的转储文件要足够大,否则不会创建系统内存转储文件。

        由系统管理的page file文件大小的要求取决于系统崩溃转储设置。对于小内存转储类型,要求的page file最小为1MB;对于完全内存转储类型,page file的最低要求是一个物理RAM大小再加上257MB;另外的内核内存转储以及自动内存转储两种类型,取决于内核虚拟内存的使用率,后者会根据系统崩溃的频率自动选择最佳页面文件大小。

        以微软技术工程师一次使用键盘触发蓝屏收集Memory Dump为例,在触发蓝屏之前,会先进行如下设置:

reg add "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles /t REG_MULTI_SZ /d "C:\pagefile.sys 8492 8492" /f
reg add "HKLM\System\CurrentControlSet\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "C:\Windows\Memory.dmp" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters" /v CrashOnCtrlScroll /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters" /v CrashOnCtrlScroll /t REG_DWORD /d 1 /f
reg add "HKLM\System\CurrentControlSet\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f

        其中关于pagefile.sys的设置,应该为8192+300MB,即8G+300MB。

 

三、启用内存转储设置

        在未指定其他转储方式和转储路径时,启用系统内存转储设置将会在系统发生蓝屏时在指定路径自动生成转储文件。通过系统设置内存转储需要管理员权限,另外如果计算机已连接网络,那么网络策略设置可能会阻止内存转储过程。启用内存转储设置方法为:

  • Windows开始菜单,点击设置按钮进入Windows设置页面。

  • 点击系统-->关于-->高级系统设置,进入系统属性页面。

 

  • “高级”标签页,然后设置“启动和故障恢复”。

 

  • “系统失败”区域进行转储类型、转储文件路径等的设置,最后重启计算机以设置生效。

 

         关于转储文件路径的选择,要保证路径所在的磁盘具备足够大小的空间。默认情况下会将内存转储写至 %SystemRoot%\Memory.dmp文件。如果在 %SystemRoot%驱动器上没有足够的可用空间,可以将该转储文件重定向到另一个具有足够的可用空间的位置(所需空间大小请参考Pagefile size)。当系统发生crash和重启,物理RAM的内容将会被写入已安装操作系统分区上的分页文件(paging file),其转储的速度依赖于硬盘的速度。如果转储文件设置成存储在另外的本地硬盘,那么大量的数据将会在硬盘上发生读写,这可能导致长时间的服务停机。任何内核或者完全内存转储文件的调试都应该是在其他标准排查方法无效情况下作为最后的选择。

四、手动蓝屏方法

        一般情况下,系统遇到严重错误会自动调用函数触发蓝屏,但也存在很多没有发生蓝屏的异常场景,如系统或者某应用窗口发生hang死,需要转储文件来对问题进行排查,那么可以通过手动蓝屏的方式实现对内存的转储。

1、使用NotMyFaul Tool生成0xD1蓝屏

        当系统下某些进程发生hang,或者发生其他异常但键盘鼠标可操作情况下,可以使用微软Sysinternals工具NotMyFaul来触发系统蓝屏,从而对内存进行转储分析。NotMyFaul工具用于系统下crash,将会触发0xD1蓝屏。

        工具的具体使用方法为:1、官网下载NotMyFaul Tool;2、启动crash。

        关于第二步,可以打开NotMyFaul的图形UI窗口进行选择触发动作种类进行crash:另外,也可以通过命令触发系统crash:

1. 管理员身份打开cmd
2. 进入NotMyFaul目录,输入命令运行noteMyfault.exe进行crash:
notMyfault.exe /crash

2、使用NMI生成0x80蓝屏

        NMI,全称为Non-Maskable Interrupt,即常说的不可屏蔽中断。在某些场景下,不能通过键盘来产生崩溃转储文件,须通过NMI开关在系统处理器上产生一个NMI来生成崩溃转储文件。比如,某些服务器基于网络浏览器图形用户界面,不能通过键盘来使系统蓝屏。

        在Windows 8 和Windows Server 2012以前的Windows操作系统需要设置注册表,之后的操作系统无需设置。修改方法为:一般情况下,如果注册表存在损坏或者注册表修改不正确,那么可能会出现严重的问题,所以在修改注册表之前,最好先做好备份。

        如果要使用NMI来产生崩溃转储文件,如硬件平台有提供自动系统恢复(ASR)的特性,那么需要关闭此特性。具体地,一般可以在BIOS中开启NMI开关,具体方法可以参考BIOS手册或者联系硬件供应商提供开启方法。如果发生一个NMI,那么将会看见一个STOP 0x80的硬件故障。

3、使用keyboard键盘生成0xE2蓝屏

        系统运行过程中,当发生hang死或者黑屏或者其他场景需要强制系统蓝屏来对内存进行转储,可以通过键盘来实现崩溃转储的触发。键盘主要分三种,一种是基于i8042prt端口的PS/2键盘,一种是USB键盘,另一种是Hyper-V键盘。这三种键盘在不同Windows版本可用性上存在差异,其中,Hyper-V键盘用于Windows 10 1903及之后的版本。

        这里通过键盘来强制系统发生崩溃也主要通过修改注册表实现。首先通过修改注册表对键盘触发系统崩溃进行设置,在实际的场景下根据需求通过键盘进行崩溃的触发。以USB键盘强制系统崩溃为例,通过如下方法对注册表进行设置:另外基于i8042prt端口的PS/2键盘和Hyper-V键盘的设置与上述一样,只需将注册表子项中的“kbdhid”替换为“i8042prt”或者“hyperkbd”。在实际的场景中,需要按住最右边Ctrl键,然后按两次ScrLk键来触发蓝屏。系统会调用KeBugCheck函数并发出0xE2的bug check,然后写入崩溃转储文件。

4、使用WinDbg调试器

        如果机器正在通过WinDbg或者KD调试器进行内核模式的调试,那么可以通过输入.crash命令来强制系统崩溃。如果输入此命令后没有立即崩溃,那么可以输入g命令查看。同样,输入此问题后,系统会调用KeBugCheck函数并产生0xE2的bug check,然后写入崩溃转储文件。

        当崩溃转储文件被写入之后,主机上的内核调试器会被提醒并且可以用来调试崩溃的机器。

五、写在最后

        一般情况下,系统蓝屏之后会自动对内存进行转储,然后在系统下生成崩溃转储文件。在某些情况下,系统虽然蓝屏,但是蓝屏进度一直停留在0%,通常这种错误是由于磁盘驱动器导致的,可以尝试升级磁盘驱动器或者联系SSD厂商进行问题排查。当然也有可能是系统其他的原因,以上文提到的pagefile为例,如果pagefile不够大,那么也将会发生转储失败。

        另外,对于应用层面的问题不是都得通过触发蓝屏来收集转储文件,根据实际场景选择触发或者不触发蓝屏来获取转储文件。触发系统蓝屏可以从系统层面来获取进程信息,而不触发可以从应用层面来进行获取信息进行分析。以进程hang为例,假设某应用程序发生hang,一方面我们可以通过上述的几个触发蓝屏的方法来收集转储文件,另一方面也可以在任务管理器中右键指定的进程,选择“创建转储文件”来获取此进程的转储文件。

 

六、参考资料

1、系统崩溃方法

2、创建转储文件

3、使用键盘转储

4、使用调试器

5、pagefile设置

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝屏检查是指当Windows 10系统遇到错误或故障时,自动进行一系列诊断和收集信息的过程。蓝屏检查能够帮助用户找出系统异常的原因和解决方法。 当系统发生严重错误导致死机或蓝屏时,Windows 10会进行自动的蓝屏检查,以收集有关错误的详细信息。这些信息包括错误代码、错误描述、故障现象、引起故障的应用程序或驱动程序等等。通过这些信息,用户可以在搜索引擎或Windows支持网站上找到相应的解决方案。 在进行蓝屏检查之前,系统会先进行内存转储。这意味着系统会将当前的内存状态保存到硬盘上的一个文件中,以便进行后续的调试分析。内存转储可以提供更多详细的错误信息,对于解决复杂的故障非常有帮助。 对于普通用户来说,他们可以通过查看蓝屏之后系统重启时的错误提示信息,或者在Windows 10设置中找到“事件查看器”来查看系统的错误日志。根据这些错误信息,用户可以自行尝试解决问题,或者搜索相关知识库或技术支持网站来获得帮助。 对于高级用户或专业技术人员来说,他们可以使用专门的调试工具来分析蓝屏的内存转储文件,以进一步深入了解系统故障的原因和解决方法。 总之,Windows 10的蓝屏检查功能帮助用户定位和解决系统故障的问题,使用户能够更好地维护和管理自己的计算机系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值