win7蓝屏windbg分析dmp蓝屏文件使用办法
发布日期:2015-06-10 作者:木风雨林 来源:http://www.olzp.comwin7蓝屏windbg分析dmp蓝屏文件使用办法
windbg蓝屏分析工具,蓝屏分析工具许多,微软也有自产的工具。但是如果在微软官网下载,或许会是英文菜单的,不如使用这款破解的widg蓝屏分析工具。说到这个调试工具还是鸭子哥上午连续出现两次蓝屏死机严重影响工作,所以必须排查出问题将它彻底处理才行。
windBG调试工具教程:
这是微软绿色出品的转储日志和内存日志读取分析工具,借助这款工具可以用来读取日志查看其中包含的内容等。转储日志和内存日志格式通常都是.dMp或.duMp格式的,如果您测试即可使用记事本打开肯定会即可返回错误。这便是为何你们需要独立的工具进行排查的原因所在,有调试工具可以用来配合win 7事件查看器使用。事件查看器可以提供基本的错误信息,如果从事件查看器中无法判断问题原因那就可以使用windBG来分析日志。
如何下载windBG调试工具:
现在的调试工具微软已不提供专业下载 ,所以需要通过 win 7 sdK 套件安装程序手动选择调试程序安装。当然您不需要忧郁因为 win 7 sdK 只是安装程序 , 可以自由选择安装哪些组件比如你们只安装windBG。
win7 sdK最新版:https://developer.microsoft.com/zh-cn/win/downloads/win-10-sdk
下载后即可打开win 7 sdK安装程序然后反选,保留debugging Tools for win这款调试工具直接。注意其他不需要使用的工具不要安装不然需要下载大量安装文件,其他工具可以尊从您的实际需要进行选择安装。安装后在win 7开始菜单的 win Kits 文件夹里直接找到windBG调试工具,打开直接使用调试工具。调试工具的功能很丰富使用也稍微有些门槛,这篇文章仅教程下载和安装,全部使用步骤xttd网随后会进行教程。
windBG安装介绍:
安装完成后便可以在win开始菜单栏中找到windbg.
安装或许会失败,如果失败的话可以到控“制面板程序程序和功能“中将 Microsoft Visual C++ 2010 Redistributable卸载,直接安装成功。
windBG使用介绍:
微软官网提供了全面的使用介绍,参考链接:https://docs.microsoft.com/en-us/win-hardware/drivers/debugger/getting-started-with-win-debugging
在使用之前,需要完成以下任务
判断哪个设备作为服务系统,那个设备作为客户系统。调试器运行在客户系统,程序运行在服务系统。
判断您将要进行用户态调试还是内核态调试。内核态可以拥有极大的权限,可以访问系统的任何部分,很多核心操作系统功能和硬件驱动运行在内核态。用户态拥有许多限制,只能运行在自己的虚拟内存空间,不能即可访问系统。
相关调试内核态,请参考:
相关调试用户态,请参考:Getting started with windbg (user-Mode).
除此之外,还需要做以下事情:
设置符号表。为了使用windbg提供的所有高级功能,必须加载正确的符号表。可以参考:symbps for win debugging (windbg, Kd, CdB, nTsd)。win 调试中的符号表
设置源码。如果您的目标是调试您自己的源代码,您需要设置源码路径。
win 调试中的符号表
相关符号表
符号表和符号文件
当应用程序,库,驱动,或者操作系统被链接,连接器生成exe文件或dll文件的同时还生成很多额外的文件叫做symbp files.符号文件拥有很多数据,这些数据在运行二进制文件时并不需要,但是在debug过程中非常拥有。通常的,这些数据包含以下信息:
全局变量
局部变量
函数名以及他们实体指针的地址
帧指针表
源代码行数
这些都被成为symbp。例如一个容易的符号文件Myprogram.pdb或许包含上百个符号表。一般来说,软件公司发布两种版本的symbp file,一种是全量symbp file包含具体pubpc symbps和private symbps,另一种简版的文件只包含pubpc symbps。
调试时,必须了解调试器能够获取与调试目标相匹配的symbp files,在线调试和调试crash dump files都需要symbps。
win以后缀名pdb保存symbps,vs将所有symbps保存在pdb文件中。
为debugging获取符号表
配置好symbps是一项充满挑战的任务,特别对于内核态调试来说。它经常需要您了解您电脑产品的所有名字和releases,调试器必须能够定位到每一个产品的symbp file。
为了简化困难,symbps files被收集到一个symbp store,可以通过symbp server获取。一个symbp store 是一个symbps files的集合,是一个索引,是一个管理员添加和删除文件的工具。这些文件通过一些独特的参数被索引,例如时间戳或图像大小。debugging Tops for win contains a symbp store creation top called symstore. debugging Tops for win contains a symbp server called symsrv.
设置符号表
微软官网上说的比较委婉,不简单操作。这里即可给出一种容易的配置办法。
将windbg安装目录添加到path环境变量中。如:C:program Filesdebugging Tops for win (x64)
新建一个环境变量_nT_sYMBoL_pATH 值为: sRV*c:mysymbp* http://msdl.microsoft.com/download/symbps
这句话告诉windbg,我的symbp文件保存在c:mysymbp文件夹里,其实里面什么都没有,甚至这个文件夹不存在,不过没关系,系统找不到的话会创建一个,并在上面的网址中去帮您下载符号文件放在里面。
重启计算机
重启计算机后会如果发现C盘多一个mysymbp文件,并且用windbg打开一个exe文件,会看到symbp search path is: sRV*c:mysymbp* http://msdl.microsoft.com/download/symbps提示信息,说明设置成功。
注意:进行完此步骤后,如果再次启动Vs,Vs会读取_nT_sYMBoL_pATH环境变量并且从中下载并读取symbp,这会造成Vs启动调试非常缓慢,建议不用windbg时可以将_nT_sYMBoL_pATH换个名字。
debugger怎么识别符号表
调试中的符号问题
用户态调试入门
调试自己的程序
假设您已经编写如下程序 void MyFunction(long p1, long p2, long p3) { long x = p1 + p2 + p3; long y = 0; y = x / p2; } void main() { long a = 2; long b = 0; MyFunction(a, b, 5); }
(1)用Visual studio 2015在x64、debug模式下生成一个Helloworld.exe,同时生成一个Helloworld.pdb。
(2)将Helloworld.pdb拷贝到配置的本地symbp文件夹中(参考:设置符号表)。
(3)用windbg打开Helloworld.exe和Helloworld.cpp。
接着就可以输入调试命令进行输入了,例如:
bu Helloworld!main
意思是在Helloworld的main模块处配置断点
g
开始运行程序
按F11进行单步调试,直到程序运行到y = x / p2将会崩溃,输出错误信息,类似这样:
(3058.3830): integer pide-by-zero - code c0000094 (first chance)
First chance exceptions are reported before any exception handpng.
This exception may be expected and handled.
Helloworld!MyFunction+0x53:
00000001`3f2a16d3 f7bd28010000 ip eax,dword ptr [rbp+128h] ss:00000000`0014f648=00000000
是说发生了0除错误。
(4)!analyze -v
将会生成一堆对错误的分析。
调试notepad
此部分的先决条件是设置好symbp(参考: 设置符号表)。
用windbg打开notepad.exe,通常在C:winsystem32,如图:
运行.reload,寻找并且加载symbps
x notepad!winMain
寻找所有与winMain匹配的symbps。
bu notepad!winMain 配置断点
bl 显示已经配置的断点信息
g 运行程序直到断点、崩溃或程序结束
lm 显示notepad程序已经加载的模块
k显示当前线程的堆栈轨迹,即函数调用结构表
g 继续运行
按菜单栏的stop按钮停止调试
bu ntdll!ZwwriteFile 配置新的断点
bl 显示断点信息
~ 查看当前程序的所有线程
~0s
k
上述两个命令可以进入0好进程,并查看堆栈轨迹
qd退出调试