WinDbg分析蓝屏dump原因 - 小众知识

WinDbg分析蓝屏dump原因

2013年01月27日 14:18:05 苏内容
  标签: 蓝屏
阅读:7328

大多数人或许都经历过系统蓝屏问题,然而大多数人不清楚该怎么处理蓝屏问题,这里主要对系统蓝屏做一些解释,同时介绍下蓝屏问题分析工具WinDbg分析蓝屏问题的一般步骤。
微软官方对蓝屏的定义是,当系统遇到一些可能会威胁系统安全的情况时,系统会停止工作,这时的状态(即蓝屏)叫做Bugcheck, 即bug检查。 一般导致蓝屏的原因可能是:系统崩溃,系统内核出错,或者别的程序导致系统停止工作。
系统蓝屏其实是系统对电脑的一种保护机制,当系统检测到严重威胁可能会导致系统或硬件安全时,这时会停止工作以起到保护作用。所以在这里也是消除下大家对蓝屏的误解。
当系统蓝屏时,系统会记录蓝屏时刻系统当前的一些工作状态并保存到事先设置好的蓝屏日志里面即dump文件,以便用户对蓝屏原因进行分析.

导致蓝屏可能的原因:

    驱动问题:坏的驱动,未签名的驱动,软件的驱动,不兼容的驱动等。

  硬件问题:内存问题,应盘问题等。
  代码错误:系统核心代码,应用程序代码。
  其他

蓝屏解决办法:

1) 检查最近对系统是否做了什么改动,比如安装新的应用程序,更新,硬件改动等。2)用WinDbg工具进行dump文件分析,查找蓝屏原因。

引用

Windbg使用:

一、WinDbg是什么?它能做什么?
  WinDbg是在windows平台下,强大的用户态和内核态调试工具。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃(IE崩溃)原因,是我们日常工作中必不可少的一个有力工具,学会使用它,将有效提升我们的问题解决效率和准确率。

二、WinDbg6.12.0002.633下载:
x86位版本下载:【微软官方安装版】
http://download.microsoft.com/do ... ngTools/dbg_x86.msi

x64位版本下载:【微软官方安装版】
http://download.microsoft.com/do ... amd64/dbg_amd64.msi

蓝屏分析工具下载:(包括WinDBG,Bluescreenview,蓝屏代码简易查看器)

链接: https://pan.baidu.com/s/1on1wv22uRPaZgQCvKoOFYg 提取码: sjuy


安装WinDbg

三、设置符号表:
  符号表是WinDbg关键的“数据库”,如果没有它,WinDbg基本上就是个废物,无法分析出更多问题原因。所以使用WinDbg设置符号表,是必须要走的一步。
1、运行WinDbg软件,File-> Symbol File Path【Ctrl+S】弹出符号表设置窗。
2、将符号表地址:

srv*c:symbols*http://msdl.microsoft.com/download/symbols

粘贴在输入框中,点击确定即可。
3、保存设置,点击File-> Save Workspace即可,否则每次运行windbg都要重新填写symbol search path。
 

四、如何使用WinDbg来分析蓝屏的dump文件以及常用命令。

首先,需要在系统设置里面进行设置,使系统在蓝屏时能够生成dump文件。具体设置路径:系统->高级系统设置->高级->启动和修复。在最下面选择最小内存核心转储。

当系统出现蓝屏后,可以到事先设置好的路径下面C:WindowsMinidump去获取蓝屏的dump文件。
然后使用WinDbg打开dump文件。

打开一个dump:
当你拿到一个dmp文件后,可使用【Ctrl+D】快捷键来打开一个dmp文件,或者点击WinDbg界面上的【File=>Open Crash Dump...】按钮,来打开一个dmp文件。第一次打开dmp文件时,可能会收到如下提示,出现这个提示时,勾选“Don't ask again in this WinDbg session”,然后点否即可。

 

注意蓝色的单词 !analvze –v , 要进一步分析蓝屏问题,可以单击这个命令。这时WinDbg会自动分析dump文件,得到更详细的结果

五、通过简单的几个步骤学会分析一些dmp文件。

  当你打开一个dmp文件后,可能因为太多信息,让你无所适从,不过没关系,我们只需要关注几个关键信息即可。

通过观察这个时间你就可以知道问题是在什么时候出现的,例如时间小于1分钟基本可以定位为开机蓝屏,反之大于一分钟则可证明是上机后或玩的过程中出现问题了。

接下来用一个简单的例子来学习简单的dmp分析,下图中System Uptime: 0 days 0:11:23.820,意思是0天(days)0小时11分23秒820毫秒时出现蓝屏了

那么是什么导致蓝屏的呢?接下来我们就要注意第二个关键信息了!

第二个关键信息:Probaly caused by(造成蓝屏可能的原因)

  这个信息是相对比较重要的一个信息,如果你运气好的话,通过这个信息基本上可以看到导致蓝屏的驱动或者程序名称了,就像下图一样,初步的分析已经有了结果,Probaly caused by后面显示的是一个名为nvmini.sys的驱动文件导致蓝屏。括号中驱动文件名后面的+号代表的是偏移地址,假如多个dmp文件的驱动文件名一样,且偏移地址也一样,则问题原因极有可能是同一个,这个偏移地址与汇编有关,这里不多做介绍。

 其实,对于分析蓝屏dmp并不是每次运气都那么好,假如刚刚打开dmp文件未看到明确的蓝屏原因时,我们就需要借助一个命令来进一步分析dmp,这个命令就是:!analyze -v,这个命令能够自动分析绝大部分蓝屏原因。当初步分析没有结果时,可以使用该命令进一步分析故障原因,当然你也可以直接点击链接样式的!analyze -v来进行执行该命令,为了让大家更直观的看懂里面的信息,大家可以直接看图片中的注释信息。

 

看了这么多信息之后,这个蓝屏dmp到底是怎么回事呢?根据dmp给出的信息,应该是:一个名为PinyinUp.exe触发了KiMsgProtect.sys这个驱动的一个Bug,导致蓝屏。 

  那么PinyinUp.exe和KiMsgProtect.sys都是哪个厂商的?一般要知道这个信息,只能去用户的机器上找了,我去找了之后发现PinyinUp.exe是搜狗输入法的自动升级程序,KiMsgProtect.sys是恒信一卡通这个计费软件的驱动,所以这个dmp表示出来的意思看上去是搜狗拼音和恒信一卡通搞在一起,出了问题!当然排除方法很简单,把搜狗输入法的自动升级程序删除掉,再看看是否仍然有蓝屏问题发生就ok了!

  学到这里,基本上已经可以分析绝大部分dmp文件了,但是分析蓝屏dmp要比较谨慎,对信息需要重新验证一次才更加保险,验证方法很简单,在WinDbg的命令输入框内,输入!process命令,就可以验证触发蓝屏的程序到底是否正确了。

运行!process命令后得到的信息:

至此,掌握以上几个简单的分析方法之后,基本上绝大多数dmp大家都可以独立分析了,当然WinDbg是个强大的工具,同时蓝屏的原因也有很多,如果想分析的足够准确,那么就只有多学多练,多去分析,因为WinDbg分析除了懂得几个命令之外,经验更加重要!

合理再给大家一些分析建议:

  并不一定每个dmp文件都可以分析出有用的结论,因此分析dmp并不需要对每个dmp文件的结果过分纠结,其实蓝屏dmp分析也是观察一个规律或者规模的问题定位方法而已。例如你分析了10个dmp,有5个dmp都指向同一个蓝屏原因,另外5个dmp的信息五花八门时,那么你完全可以先处理掉5次蓝屏,同一个原因的问题,因为解决了这个问题之后,后面的问题可能就都解决了!

扩展阅读