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

【原文不知,我转自http://blog.sina.com.cn/s/blog_a459dcf501017j2v.html】


  前言:在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 ,并且点击确定
WinDbg分析DMP文件方法完全攻略

  (2)在(1)确定后弹出如下对话框
WinDbg分析DMP文件方法完全攻略

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

  (4)再次在运行窗口中输入:drwtsn32,如下图:
WinDbg分析DMP文件方法完全攻略
  
  (5)点击确定按钮,在弹出的对话框中按照下列方式设置
 WinDbg分析DMP文件方法完全攻略

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


三、Windbg下载地址
 
 
四、DMP文件获取
(1) 用vs2010创建一个基于win32的程序,其源码如下:
WinDbg分析DMP文件方法完全攻略

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

 
(3)运行(2)中test.exe程序 ,程序崩溃。如下图:
WinDbg分析DMP文件方法完全攻略

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

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

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

 
(2)在弹出对话框中输入:
D:\testdmp;srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols  点击ok按钮
 WinDbg分析DMP文件方法完全攻略

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

拷贝后结果如下
 WinDbg分析DMP文件方法完全攻略


(4) 源代码路径设置(参考下图)
 WinDbg分析DMP文件方法完全攻略

(5)在弹出对话框中输入:D:\Personal\My Documents\Visual Studio 2010\Projects\test 点击ok按钮
 
 WinDbg分析DMP文件方法完全攻略

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

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

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


点击打开,完成dmp导入。导入后自动定位错误的行,并在command中给出崩溃的原因,如下如:
WinDbg分析DMP文件方法完全攻略

### 如何使用 WinDbg 分析 DMP 文件中的 CPU 使用情况 当遇到程序导致 CPU 占用率异常的情况时,可以通过分析 dump 文件来定位问题所在。具体来说,WinDbg 是一款强大的调试工具,能够帮助深入理解应用程序的行为。 #### 加载 Dump 文件并初始化环境 启动 WinDbg 后加载目标 dmp 文件: ```powershell .open -a path\to\dumpfile.dmp ``` 这一步骤会读入内存映像,并准备后续命令执行所需的数据结构[^1]。 #### 查看线程状态与调用堆栈 为了找出哪个线程占用了过多资源,可利用 `~* kb` 命令遍历所有活动线程及其当前执行路径: ```text ~* kb ``` 上述指令将显示每个线程最后几次函数调用的信息链表,有助于识别是否存在无限循环或其他不正常行为模式[^2]。 #### 定位热点代码片段 如果怀疑某些特定部分可能是瓶颈,则可通过设置断点或直接跳转至可疑位置来进行更细致的研究。例如,假设已知某方法名,可以直接通过 `.cxr /c` 设置上下文后查找该地址处的汇编指令序列;也可以尝试使用 SOS 扩展插件(针对 .NET 应用),它提供了诸如 `!clrstack` 这样的高级功能用于展示托管层面上的方法调用关系图谱[^3]。 #### 统计时间消耗分布概况 对于复杂场景下难以直观判断的问题,还可以借助 ETW (Event Tracing for Windows) 技术收集性能事件日志,之后导入到 PerfView 工具里做进一步聚合统计处理,从而获得更加宏观的时间开销视图。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值