使用dbghelp生成dump文件以及事后调试分析
前言
在产品的实际应用环境中,如果我们的程序在客户那里出现了问题,例如程序异常了,而这个时候的现象又不能还原或者很难还原重现,那么只有使用dump文件来保存程序的当前运行信息,例如调用堆栈等,同时使用符号文件来定位问题了;这里主要讲解使用dbghelp库来生成输出dump文件,同时使用符号文件和windbg来分析问题。
样例代码

1 #include "stdafx.h"
2 #include <Windows.h>
3 #include <iostream>
4 #include "dbghelp.h"
5 using namespace std;
6 LONG WINAPI TopLevelExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionInfo)
7 {
8 cout << "Enter TopLevelExceptionFilter Function" << endl;
9 HANDLE hFile = CreateFile( _T("project.dmp"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
10 MINIDUMP_EXCEPTION_INFORMATION stExceptionParam;
11 stExceptionParam.ThreadId = GetCurrentThreadId();
12 stExceptionParam.ExceptionPointers = pExceptionInfo;
13 stExceptionParam.ClientPointers = FALSE;
14 MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hFile,MiniDumpWithFullMemory,&stExceptionParam,NULL,NULL);
15 CloseHandle(hFile);
16 getchar();
17 return EXCEPTION_EXECUTE_HANDLER;
18 }
19
20 int _tmain(int argc, _TCHAR* argv[])
21 {
22 cout<<"Enter Main Function"<<endl;
23 SetUnhandledExceptionFilter(TopLevelExceptionFilter);
24 int *pValue = NULL;
25 cout<<"Invalid Access"<<endl;
26 *pValue = 0;
27 cout<<"Finish Main Function"<<endl;
28 getchar();
29
30 return 0;
31 }

该段代码很简单,有几个API函数大家查查msdn即可;我就不再讲解了.
工程设置
由于使用了dbghelp库,因此我们需要配置库依赖以及头文件包含信息;设置头文件包含如下图所示:

设置库文件依赖如下图所示:


设置好之后,即可成功编译该工程代码,同时将dbghelp.dll文件放入可执行文件目录下;最后结果如下图所示:

由于我默认设置了生成符号文件,即DumpProject.pdb文件;关于符号文件的生成,如下图设置所示:


运行程序
双击DumpProject.exe文件,根据代码逻辑,由于程序有异常,因此会生成dump文件,运行结果如下图所示:

同时生成了project.dmp文件,如下图所示:

分析问题
得到了dmp文件,符号文件,同时又有对应的源码,这时使用WinDbg工具来解决问题,找出异常出在哪里。
打开WinDbg工具,设置好符号文件位置目录,源码文件位置目录,然后打开project.dmp文件,显示如下所示:

在WinDbg命令行中输入如下!analyze -v命令,从而可以分析出异常出现的具体位置,如下图所示:

结束
方便快捷的定位分析问题,提高效率;
http://www.cnblogs.com/appsucc/p/3458906.html
使用dbghelp生成dump文件以及事后调试分析的更多相关文章
- 调试SQLSERVER (一)生成dump文件的方法
调试SQLSERVER (一)生成dump文件的方法 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置调试SQLSERVER (三)使用Windbg调试SQLSERVER ...
- 程序自动生成Dump文件
前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...
- 程序自动生成Dump文件()
前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...
- 如何设置C++崩溃时生成Dump文件
Dump 文件是进程的内存镜像 , 可以把程序的执行状态通过调试器保存到dump文件中 ; Dump 文件是用来给驱动程序编写人员调试驱动程序用的 , 这种文件必须用专用工具软件打开 , 比如使用 W ...
- 获取崩溃时的调用栈和生成dump文件,然后自动重启
首先要说明的是: linux 下 比较方便可以得到 崩溃时的调用栈,win下 比较难办 1. linux 获取调用栈 代码奉上: #include <execinfo.h> //在头 ...
- 如何生成Dump文件
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何生成Dump文件.
- JVM在遇到OOM(OutOfMemoryError)时生成Dump文件
方法一: 命令:jmap -dump:format=b,file=heap.bin file:保存路径及文件名pid:进程编号(windows通过任务管理器查看,linux通过ps aux查看) du ...
- WinDBG 技巧:如何生成Dump 文件(.dump 命令)
程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件. 步骤: 1) 打开WinDBG并将之Attach 到 ...
- windows生成dump文件
windows下程序有时突然崩溃了,偶发性的崩溃很难找.于是就需要保存崩溃时的dump信息了. 下面是关于如何生成dmp文件的代码. 头文件 #pragma once #include <win ...
随机推荐
- mysql事务和锁InnoDB
背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备 ...
- springBoot专题3---->springBoot与多数据源的配置
最近有点忙,更新有点慢.今天进来说说一说springBoot中如何配置多数据源. 第一,新建一个名为springBoot-mutidata的maven项目,完整的pom.xml配置如下: <?x ...
- scala安装
一:在官网下载相应的版本http://www.scala-lang.org/download/2.10.6.html 二,在linux中解压下载下来的scala包 三:配置环境变量 export ...
- 分页显示中关于"序号"的问题
项目开发中要求列表显示要明显看到总条目数,所以就要求序号从1开始. 如下为从1开始的序号展示: <s:iterator value="#request.pageView.records ...
- CSS中定义CLASS时,中间有空格和每空格的区别
css选择器的格式,规定不带空格的选择条件之间是“且”关系,带空格的是“父子”关系,并且可以是非直接的“父子”关系 <style> .e1.e2 { background-color:ye ...
- jquery 20161014
jquery.fn.extend <!DOCTYPE html> <html> <head lang="en"> <meta charse ...
- Redis到底该如何利用(二)?
上一篇文章里我简述了使用Keys作为Redis搜索的方式,确实感受到了社区的力量,写文章好处多.首先谢谢各位前辈的指导,我知道了拿Redis作为搜索是个错误的方向.本来这篇文章我觉得确实没必要发了,但 ...
- nfs的挂载方法
对于很多嵌入式驱动开发者,要进行很多次调试,如果nfs搭建不起来,那么对开发是很不方便的.经过三天,我终于把自己编的内核下载到开发板,并实现了nfs文件系统的挂载.今天把过程写下来. 思路 一 编译a ...
- mysql数据库引擎
看某个使用的引擎,在显示结果里参数engine后面的就表示该表当前用的存储引擎:mysql> show create table 表名; 看mysql支持哪些存储引擎:mysql> sho ...
- 纯CSS实现二级下拉导航菜单
这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: < ...