生成dmp的程序方法

转载 2013年12月04日 17:44:09

1、生成dmp的程序

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


//设置异常处理回调函数
SetUnhandledExceptionFilter(UnhandledExceptionFilter);


//异常处理代码
//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了 
//EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束 
//EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行 
LONG UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
    CString   strDumpFile; 
    strDumpFile.Format(
"%d",CTime::GetCurrentTime().GetTickCount());
    strDumpFile   
+=  ".dmp "
    HANDLE   hFile   
=   CreateFile(strDumpFile,   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); 
    } 

    theApp.PostThreadMessage(WM_QUIT,
0,0);
    
return EXCEPTION_EXECUTE_HANDLER;
}

2、调试dump文件

    1)用windbg。

    2)用vc,把dmp文件和exe, pdb文件放在同一目录下, 然后用编译器(如vc)打开, 然后开始调试就会中断到刚才中断的地方.


3、以下是网上搜集到的条件,尚未验证是否是必需的,如果不能正确的生成dmp,可尝试以下方法

    1)SetUnhandledExceptionFilter()并不能处理所有的异常,比如CRT异常需要调用_set_invalid_parameter_handler()才行

    1)要设置c运行库异常处理函授。这样当出错后,会引发你的异常处理,你的处理中,可以直接丢掉或重新启动你的exe,或写入log文件。

    2)注意生成的release应用程序需要开启“生成调试信息”选项。

    2)使用VS2008的话,不需要开启“生成调试信息”选项就可以生成的。

    3)编译release版本的时候同时生成map文件,具体可以在网上查找一下关于map文件的使用方法。

    3)生成可执行文件时在工程属性设置里的“调试”选项里将“生成映射文件”设置为“是”。这主要是用来在出错时通过dump和map文件对错误定位。

4、其他工具

    1)生成dump文件需要Dr.Watson,它是Windows自带的调试工具,只要对它进行了设置,程序出错后就可以在相应目录下找到dump文件。可参见如下资料:http://hi.baidu.com/mryongzhang/blog/item/11a774edf9b513d72e2e2167.html

    2)adplus是最有用的工具,http://support.microsoft.com/kb/286350/

    3) 可以下载自动生成crash文件的开源代码 XCrashReport http://www.codeproject.com/Articles/5257/XCrashReport-Exception-Handling-and-Crash-Reportin 嵌入此代码后,需要依赖默认库 dbghelp.lib 在 vc工程中 选择 linker -> input -> Additional Dependencies中增加dbghelp.lib库依赖,如果是在release版本中,则还需要生成map信息和调试信息,linker -> manifest file -> Generate manifest -> yes, Allow Isolation -> yes, 然后在C++选项中,将Debug infomation format设置为Program database(/Zi)   最后记得备份你生成的pdb文件,为了给crash后的dmp文件调试用

        关于XCrashReport的其他相关介绍,可以再参看此链接 http://blog.csdn.net/ljmscsq/article/details/4998738

DMP文件的生成和使用

#include stdio.h> #include afxwin.h> #include dbghelp.h> #pragma comment(lib, "Dbghelp.lib") ...

Oracle导出表(即DMP文件)的两种方法

方法一:利用PL/SQL Developer工具导出: 菜单栏---->Tools---->Export Tables,如下图,设置相关参数即可: 方法二:利用cm...
  • lanpy88
  • lanpy88
  • 2012年05月18日 16:17
  • 354809

程序异常自动生成DMP文件

随着软件的发展,有时候在客户机器上会遇到各种奇形怪状的问题,如果崩溃能够必现,倒还好调试一些,就怕隔三差五的来给你崩溃下; 所以,需要对客户每次崩溃的情况有所了解,可以让程序自动生成异常的d...
  • zhlstud
  • zhlstud
  • 2017年06月10日 11:05
  • 238

软件crash后生成dmp,可用VC编译器和Windbg查看 简单使用问题

最近软件有个crash,在debug下ji

vc++程序崩溃后不生成dump文件

这几天给自己的程序通过SetUnhandleExceptionFilte加dump机制。实测时发现不是所有的崩溃,都能生成dump文件:比如assert(false);语句就没有生成dump文件。上网...

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

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

程序自动生成Dump文件

程序自动生成Dump文件 前言:通过drwtsn32、NTSD、CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD、CDB可以完全解决,但并不是所有的操作系统中都安装...
  • zhangbp
  • zhangbp
  • 2012年11月13日 21:40
  • 1108

DMP文件的生成和使用

1、生成dmp的程序 #include  dbghelp.h>  #pragma comment(lib,  "dbghelp.lib") //设置异常处理回调函数 SetUnha...
  • educast
  • educast
  • 2014年02月08日 08:51
  • 1518

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C# 程序导入导出oracle数据库

/// /// MrTom /// Oracle数据库备份 /// private void OracleBackUp() ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生成dmp的程序方法
举报原因:
原因补充:

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