WinDbg分析DMP文件方法完全攻略

转载 2013年12月04日 17:59:55

前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010远程调试的方法,请参考http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html),然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugger进行调试,但是如果此时开发人员无法直接去用户现场调试,此时就需要用户生成DMP文件,以便开发人员使用DMP文件进行分析。
 
    本文主要介绍C++开发过程中出现程序崩溃后,如何进行分析定位bug(基于xp系统)。
 
一、DMP文件获取设置
  (1)在运行窗口中输入 drwtsn32 -i ,并且点击确定


  (2)在(1)确定后弹出如下对话框


  (3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。
    Dr.Watson系统自带的程序。

  (4)再次在运行窗口中输入:drwtsn32,如下图:

  
  (5)点击确定按钮,在弹出的对话框中按照下列方式设置
 

  (6) 点击确定按钮完成DMP文件设置。
 
 
二、关闭Dr.Watson方法
(1)打开注册表
(2)在注册表中进入主键[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug],然后将“AUTO”键值设置为0如下图:



三、Windbg下载地址
 
 
四、DMP文件获取
(1) 用vs2010创建一个基于win32的程序,其源码如下:


 
(2)我们知道在学习C++中整数不能跟0进行除运算,否则会引起程序崩溃。而(1)中就是编写能触发0的异常,导致程序结束运行的程序。编译(1)中的程序,结果如下:


 
(3)运行(2)中test.exe程序 ,程序崩溃。如下图:


 
(4) 按照一、DMP文件获取设置步骤实现Dr.Watson设置为默认应用程序调试程序
 
(5)再次运行运行(2)中test.exe程序 如下图:
 

点击确定完成dmp文件的生成。
 
 
(6)打开在(4)中设置dmp文件路径。(本例中默认地址为:C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson)如下图:
 

其中user.dmp就是我们需要的dmp文件。
 
五、分析《四、DMP文件获取》中获取的DMP文件
(1)符号表路径设置(参考下图)
 

 
(2)在弹出对话框中输入:
D:\testdmp;srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols  点击ok按钮
 

注意:D:\testdmp; 这个是我们存放符号的文件夹,在进行此步骤前创建。
其中;srv*d:/symbolslocal*http://msdl.microsoft.com/download/symbols设置的目的是下载该程序用到的操作系统相关的库函数的符号表到本地
 
(3) 将前面《四、DMP文件获取》中程序生成的符号test.pdb(下图)拷贝到D:\testdmp中

拷贝后结果如下
 


(4) 源代码路径设置(参考下图)
 

(5)在弹出对话框中输入:D:\Personal\My Documents\Visual Studio 2010\Projects\test 点击ok按钮

 
 

(6)DMP文件导入(参考下图)






点击打开,完成dmp导入。导入后自动定位错误的行,并在command中给出崩溃的原因,如下如:


 

程序异常崩溃捕捉-dmp文件及Windbg分析

前面介绍如如何用WinDBG 生成crash dump 《WinDBG 技巧:如何生成Dump 文件(.dump 命令) 》,但是用户机器上通常不安装WinDBG, 而且多数用户也不知道怎么使用Wi...
  • nui111
  • nui111
  • 2014年06月29日 22:09
  • 2526

WINDBG分析DMP方法

上次发了2100蓝屏抓DMP分析案例这个帖子后,好多人想学怎么分析DMP,那我也是刚刚学的,简单的说下。 http://bbs.icafe8.com/forum.php?mod=viewthread...

使用windbg分析dmp文件定位程序bug

本文编写了一个简单能产生除数为0异常的程序,让其运行,产生崩溃,通过drwtsn产生dmp文件,然后通过windbg分析dmp文件,定位程序bug。目的:学习windbg基本功能使用。程序源代码:vo...
  • sky04
  • sky04
  • 2010年10月09日 11:05
  • 5286

如何分析堆栈出错的 dmp 文件

标 题: 【讨论】如何分析堆栈出错的 dmp 文件作 者: 小喂时 间: 2007-09-05,15:41链 接: http://bbs.pediy.com/showthread.php?t=5114...

windbg分析dump文件

前言:WinDbg是微软开发的免费源代码级的调试工具。WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。本文的讨论是在安装了Debugging Tools for Win...

VS2010调试程序--Dump文件方式

在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了。因为release版本来就少了很多调试信息,更何况一...

VS2008调试dump文件

用vs2008分析dump文件 双击minidump文件(*.dmp)。默认会启动vs2008。菜单Tools/Options, Debugging/Symbols,增加PDB文件路径。注:如果mi...

用VS调试dump的几个问题

用VS调试dump的几个问题 1. dump文件和pdb文件的匹配问题 >> 发布二进制文件时生成的pdb文件一定要保留,只有当发布的二进制文件和pdb文件是同时生成的才好正确调试。 2...

Windows调试 - 如何使用dump文件

Windows调试 - 如何使用dump文件 2013-02-04 16:05 445人阅读 评论(0) 收藏 举报 dmp dump debug visua 如何使用dum...
  • jfkidear
  • jfkidear
  • 2014年03月26日 18:53
  • 10755

DMP文件的生成和使用

1、生成dmp的程序 #include  dbghelp.h> #pragma comment(lib,  "dbghelp.lib") //设置异常处理回调函数 SetUnhan...
  • EckelWei
  • EckelWei
  • 2012年06月14日 14:02
  • 10773
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinDbg分析DMP文件方法完全攻略
举报原因:
原因补充:

(最多只允许输入30个字)