WinDbg分析DUMP文件

1. 如何生成dump文件?

原理:通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件;

SetUnhandledExceptionFilter:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SETUNHANDLEDEXCEPTIONFILTER);k(DevLang-%22C%2B%2B%22)&rd=true

MiniDumpWriteDump:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(MINIDUMPWRITEDUMP);k(DevLang-%22C%2B%2B%22)&rd=true

示例:

  

 1 #ifndef _DUMP_GENERATE_H_
 2 #define _DUMP_GENERATE_H_
 3
 4 #include <Windows.h>
 5 #include <DbgHelp.h>
 6 #pragma comment(lib, "DbgHelp.lib")
 7
 8 LONG WINAPI MyUnhandledExceptionFilter(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo);
 9 void MyDumpGenerate();
10
11 void MyDumpGenerate()
12 {
13  SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
14 }
15
16 LONG WINAPI MyUnhandledExceptionFilter(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo)
17 {
18  MessageBox(0,L"DumpGenerate",0,0);
19
20  HANDLE lhDumpFile = CreateFile(L"D:\\test.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
21
22  MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
23  loExceptionInfo.ExceptionPointers = ExceptionInfo;
24  loExceptionInfo.ThreadId = GetCurrentThreadId();
25  loExceptionInfo.ClientPointers = TRUE;
26  MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
27
28  CloseHandle(lhDumpFile);
29
30  /*
31   * EXCEPTION_CONTINUE_SEARCH:将异常传给调试器
32   * EXCEPTION_EXECUTE_HANDLER:不显示错误信息
33   */
34  return EXCEPTION_EXECUTE_HANDLER;
35 }
36
37 #endif // _DUMP_GENERATE_H_
38
39 ////////////////
40 // main.cpp
41 int main()
42 {
43  MyDumpGenerate();
44  int* p = NULL;
45  *p = 1;
46  // 这里异常后,会自动调用MyUnhandledExceptionFilter接口,生成dump文件:test.dmp。
47  return 0;
48 }

2. 如何使用WinDbg调试dump文件,以test.dmp为例:

2.1 准备步骤:

2.1.1 设置pdb文件路径:

2.1.2 设置源文件路径:

2.1.3 导入/拖入test.dmp文件;

2.2 通过命令(.reload -> ! analyze -v)来分析dump,然后可以定位到如下错误:

http://www.cnblogs.com/ahuo/archive/2010/05/19/1739053.html(此文转载,感谢作者的无私奉献)

3. 使用WinDbg调试程序:

  待续...

时间: 2024-12-14 18:06:58

WinDbg分析DUMP文件的相关文章

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

前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试.在开发人员测试出现的bug,我们可以直接在本地进行调试.如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010远程调试的方法,请参考http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html),然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugg

[Java基础] 使用JMAP dump及分析dump文件

转载:http://blog.csdn.net/kevin_luan/article/details/8447896 http://liulinxia02.blog.163.com/blog/static/26868772009111861834942/ http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/ 其中jmap是java自带的工具 查看整个JVM内存状态 jmap -heap [pid]要注意的

使用jprofiler分析dump文件一个实例

1.. jstact 命令先分析一下 一次fullgc之后 old 老年代使用比例 只降低2% 应该有什么大的对象常驻内存. 2.可以使用jmap 命令查看对象大小 (这里后面使用jprofiler 就没用这个命令) jmap -histo:live 72947 | more 3 .dump 线上文件栈 [[email protected] ~]# jmap -dump:live,format=b,file=heap201712.hropf  72947   Dumping heap to /r

MAT 分析dump文件

public class OOM { private static List<Byte[]> list = new ArrayList<Byte[]>(); public static void main(String[] args) { Zip zip = new Zip(); zip.test(list); } } public class Zip { private List<Byte[]> a = null; public List<Byte[]>

windbg分析BSOD dump文件实战

今天刚好手边有一个系统蓝屏的dump文件,下面一步一步来找到出错的地方. 1.用windbg打开dump文件,设置好符号路径等. 如下图所示 已经基本确定了是哪个驱动引起的问题. 2.执行analyze -v命令,如下图所示 这时候会把出问题的地方指出来,并且会把栈信息也列出来,并指出是哪一行的代码有问题. 3.确认一下,可以先用kp命令查看一下函数的输入参数,再用dv /t /v命令查看一下局部变量,确认了就是那一行指针为空导致的问题. 如图所示

WinDBG 技巧:如何生成Dump 文件(.dump 命令)

程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件. 步骤: 1) 打开WinDBG并将之Attach 到crash的程序进程 2) 输入产生dump 文件的命令 WinDBG产生dump 文件的命令是 .dump ,可以选择不同的参数来生成不同类型的dump文件. 选项(1): /m 命令行示例:.dump /m C:\dumps\myapp.dmp 注解: 缺省选项,生成标准的minidump, 转

Java千百问_07JVM架构(014)_什么是Dump文件

点击进入_更多_Java千百问 1.什么是Dump文件 Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到dump文件中. Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开. 当我们的程序发布出去之后,在客户机上是无法跟踪代码的,所以Dump(扩展名是 .dmp)文件对于我们来说特别重要.我们可以通过.dmp文件把出现问题的情况再现,然后根据再现的状况(包括堆栈调用等情况),可以找到出现问题对应的行号. 2.如何生成Dump文件 生成Dump文

使用windbg分析iis崩溃的一个实例

问题背景说明:客户的生产环境不定时发生崩溃,需要定位崩溃的原因.在开发环境不能重现该问题,准备抓取IIS的dump文件分析 第一步:在客户的生产环境抓取dump文件 参考:IIS崩溃时自动抓取Dump 等IIS崩溃时,会自动转存dump文件 第二步:分析dump文件 2.1  选择在那个环境分析dump文件 一般可以选择在生产环境分析dump文件,(如果开发环境有符号表文件,也可以把dump文件拷贝到开发环境分析) 2.2 安装windbg 参考:wndbg下载与安装 2.2 选择dump文件

Windows下获取Dump文件以及进程下各线程调用栈的方法总结(转)

1. Dump文件的用途 Dump文件, 主要用于诊断一个进程的运行状态,尤其是碰到崩溃(Crash)或者挂起(hang)不响应时,需要分析它的工作状态.  除了平时常见的attach到这个进程, 分析Dump文件就成了一个重要的手段了. 相信一些做软件维护和支持的工程师在这方面深有体会, 比如某天某时,客户说, 呀, 糟糕, 服务器进程挂掉了, 怎么回事? 然后,看看了日志文件,也没有什么可用的信息.  技术支持告诉他, 按某步骤生成一个dump文件来看看...... 2. 如何生成Dump文