windbg内核诊断方式--转载

一、WinDbg是什么?它能做什么?

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

二、WinDbg6.12.0002.633下载:

x86位版本下载:【微软官方安装版

  蓝屏Dump分析工具WinDbg(x86).rar (13.2 MB, 11,228 次)

x64位版本下载:【微软官方安装版

  蓝屏Dump分析工具WinDbg(x64).rar (12.4 MB, 9,251 次)

三、设置符号表:

  符号表是WinDbg关键的“数据库”,如果没有它,WinDbg基本上就是个废物,无法分析出更多问题原因。所以使用WinDbg设置符号表,是必须要走的一步。
1、运行WinDbg软件,然后按【Ctrl+S】弹出符号表设置窗
2、将符号表地址:SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols粘贴在输入框中,点击确定即可。
注:红色字体为符号表本地存储路径,建议固定路径,可避免符号表重复下载。

四、学会打开第一个dmp文件!

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


  当你想打开第二个dmp文件时,可能因为上一个分析记录未清除,导致无法直接分析下一个dmp文件,此时你可以使用快捷键【Shift+F5】来关闭上一个dmp分析记录。

  至此,简单的WinDbg使用你已经学会了!

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

分享一个8E蓝屏dmp案例的分析过程:
  当你打开一个dmp文件后,可能因为太多信息,让你无所适从,不过没关系,我们只需要关注几个关键信息即可。

第一个关键信息:System Uptime(开机时间):

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

接下来用一个简单的例子来学习简单的dmp分析,下图中System Uptime: 0 days 0:14:23.581,意思是0天(days)0小时14分23秒581毫秒时出现蓝屏了,看来是上机没多久就蓝屏了,这位顾客很悲催……

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

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

  这个信息是相对比较重要的一个信息,如果你运气好的话,通过这个信息基本上可以看到导致蓝屏的驱动或者程序名称了,就像下图一样,初步的分析已经有了结果,Probaly caused by后面显示的是一个名为KiMsgProtect.sys的驱动文件导致蓝屏,这个文件就是恒信一卡通的一个关键驱动。因此蓝屏则很有可能和一卡通有关。

括号中驱动文件名后面的+号代表的是偏移地址,假如多个dmp文件的驱动文件名一样,且偏移地址也一样,则问题原因极有可能是同一个,这个偏移地址与汇编有关,这里不多做介绍。

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

  看了这么多信息之后,这个蓝屏dmp到底是怎么回事呢?根据dmp给出的信息,应该是:顾客上机0天(days)0小时14分23秒581毫秒时,一个名为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次蓝屏,同一个原因的问题,因为解决了这个问题之后,后面的问题可能就都解决了!

  vDiskBus+da6c这个蓝屏信息是指网维大师蓝屏硬盘的dmp捕捉机制,这并不是蓝屏原因,有很多朋友因为文章看到一半就去折腾,结果得出一些错误结论,所以这里特意提醒下大家,看到vDiskBus+da6c这个信息之后,就不要再判断错误了,这个信息可以证实的信息是:这个dmp文件是通过网维大师蓝屏鹰眼捕捉到的,且是在网维无盘客户机上捕捉到的,其它的就不能代表什么了。

时间: 2024-10-05 03:45:29

windbg内核诊断方式--转载的相关文章

调试Bug的神兵利器:通过WinDbg条件断点收集Log [转载]

转载链接:http://blog.csdn.net/atfield/article/details/4037248 前段时间花了几天一直在用WinDbg调试一个比较棘手的Bug.这个Bug是C# Team那边发现的,他们的Testcase跑大概10分钟左右会出一个在CLR内部的ASSERT.比较难调试的主要原因在于ASSERT表明一个全局的数据结构出现了问题,本来不应该用完的数组却已经用完了(因为按照设计,这个数组是边使用边清理的,是不会用完的).初步想到的有下面几种方案来调试: 1. 设置数据

使用WinDbg内核调试[转]

Technorati 标签: windbg,内核调试 WINDOWS调试工具很强大,但是学习使用它们并不容易.特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器). 本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试. 本文将假定开发者熟悉一般WINDOWS操作系统和进程的建立过程. 本文的重点是集成内核模式和用户态模式的图形化调试器WinDbg.KD在脚本和自动化调试中更有用,并且

查看修改mysql编码方式[转载]

MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为: >show variables like 'character%';+--------------------------+----------------------------+| Variable

Java Object 对象创建的方式 [ 转载 ]

Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建对象的方式: 1.构造器:用new语句创建对象,这是最常用的创建对象的方式. 2.反射:运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法. 3.克隆:调用对象的clone()方法. 4.序列化:运用反

《Linux0.11内核完全注释》读书笔记之内核启动方式总结

Linux0.11启动方式 BIOS启动 当PC电源打开后,80X86结构的CPU将自动进入实模式,并从0xFFFF0开始自动执行程序, 这通常是ROM-BIOS中的地址.PC机的BIOS将执行某些系统检测,并在物理地址0处开始初 始化中断向量.此后将可启动设备的第一个扇区读入内存绝对地址0x7C00处,并跳转到这 个地方. bootsect.s/setup.s bootsect.s Linux最前面的部分是boot/bootsect.s,它将由BIOS读入到内存绝对地址0x7C00处, 当它被

Java 实现 SSH 协议的客户端登录认证方式--转载

背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间能够进行正常的网络通信,不至于出现在一台机器上发出的指令到另一台机器上成了不可认的乱码,SSH 就是众多协议的其中之一.经典的七层 OSI 模型(Open System Interconnection Reference Model)出现后,大大地解决了网络互联的兼容性问题,它将网络划分成服务.接口

java开发webservice的几种方式(转载)

webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2方式 Axis是apache下一个开源的webservice开发组件,出现的算是比较早了,也比较成熟.这里主要介绍Axis+eclipse开发webservice,当然不用eclipse也可以开发和发布webservice,只是用eclipse会比较方便. (1)下载eclipse的Java EE版本 http://www.eclipse.org/downloa

C中内存分配方式[转载]

在C 中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 一.简介: 1.栈,就是那些由编译器在需要的时候分配,在无需的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程式去控制,一般一个new就要对应一个delete.假如程式员没有释放掉,那么在程式结束后,操作系统会自动回收. 3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,但是他是用free来

ios-Objective-C中的各种遍历(迭代)方式(转载)

iOS开发实用技巧-Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https://github.com/HanGangAndHanMeimei/Code 一.使用for循环 要遍历字典.数组或者是集合,for循环是最简单也用的比较多的方法,示例如下: 1 //普通的for循环遍历 2 -(void)iteratorWithFor 3 { 4 //////////处理数组/////