DMP文件的生成和使用

1、生成dmp的程序

//异常处理代码
//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了 
//EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束 
//EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行 

#include  <dbghelp.h> 
#include <windows.h>
#include <dbghelp.h>
#include <time.h>
#pragma comment(lib,  "dbghelp.lib")

SetUnhandledExceptionFilter(UnhandledExceptionFilter);

LONG  WINAPI UnhandledExceptionFilterbb(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
	time_t timep;
	struct tm *pCur;
	time(&timep);
	pCur=localtime(&timep); 
	char  chTime[50]={0};
	strftime(chTime,50,"%Y-%m-%d %H:%M:%S", pCur);
	strcat(chTime,".dmp");
	HANDLE   hFile   =   CreateFile(chTime,   GENERIC_WRITE,   FILE_SHARE_WRITE,   NULL,   CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,   NULL   );


	if   (hFile!=INVALID_HANDLE_VALUE)
	{ 
		MINIDUMP_EXCEPTION_INFORMATION   ExInfo; 


		ExInfo.ThreadId   =   ::GetCurrentThreadId();
		ExInfo.ExceptionPointers   =   ExceptionInfo;
		ExInfo.ClientPointers   =   NULL;


		//   write   the   dump
		BOOL   bOK   =   MiniDumpWriteDump(GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,  &ExInfo,   NULL,   NULL   );
		CloseHandle(hFile); 
	} 
	return EXCEPTION_EXECUTE_HANDLER;
}
<p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">2、调试dump文件</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    1)用windbg。</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    2)用vc,把dmp文件和exe, pdb文件放在同一目录下, 然后用编译器(如vc)打开, 然后开始调试就会中断到刚才中断的地方.</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">
3、以下是网上搜集到的条件,尚未验证是否是必需的,如果不能正确的生成dmp,可尝试以下方法</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    1)SetUnhandledExceptionFilter()并不能处理所有的异常,比如CRT异常需要调用_set_invalid_parameter_handler()才行</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    1)要设置c运行库异常处理函授。这样当出错后,会引发你的异常处理,你的处理中,可以直接丢掉或重新启动你的exe,或写入log文件。</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    2)注意生成的release应用程序需要开启“生成调试信息”选项。</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    2)使用VS2008的话,不需要开启“生成调试信息”选项就可以生成的。</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    3)编译release版本的时候同时生成map文件,具体可以在网上查找一下关于map文件的使用方法。</p><p style="font-size: 13px; line-height: 1.5; margin: 10px auto; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">    3)生成可执行文件时在工程属性设置里的“调试”选项里将“生成映射文件”设置为“是”。这主要是用来在出错时通过dump和map文件对错误定位</p>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值