调试技术:生成DMP文件

通过本文你可以知道如何生成DMP文件、相关知识的详解连接、和知识来源连接

 

最近对查崩溃相关的技术感兴趣,于是在网上搜索学习了下。

优秀文章有 <<让程序在崩溃时体面的退出>>系列,这里推荐下:http://blog.csdn.net/starlee/article/details/6618849

看完了想系统的学习下,原来是MS在XP发布的时候推出的一套调试技术。全文已经收录在MSDN里了:Debugging and Error Handling。目前还没看完。

以下是生成DMP文件最重要的函数详解 <<Effective minidump>>

http://blog.csdn.net/pkrobbie/article/details/6641081

http://blog.csdn.net/pkrobbie/article/details/6636310

 

这里我想用最简洁的步骤给出DMP文件的生成方法:

 

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

void dump()
{
  HMODULE hDbgHelpDll;
  hDbgHelpDll = LoadLibrary("dbghelp.dll");
  if( hDbgHelpDll != INVALID_HANDLE_VALUE)
  {
    typedef BOOL (CALLBACK* tMiniDumpWriteDump)(
        HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,PMINIDUMP_EXCEPTION_INFORMATION,PMINIDUMP_USER_STREAM_INFORMATION,PMINIDUMP_CALLBACK_INFORMATION
        );
    tMiniDumpWriteDump pMiniDumpWriteDump = (tMiniDumpWriteDump)GetProcAddress(hDbgHelpDll,"MiniDumpWriteDump");

handle xx = cratefile('xxx.dmp', g_wr,f_s_r,0,c_a,F_f_w_t,0);
M_EXCEPION_INFOMATION eInfo;
eInfo.ThreadId = getCurTid();
e.ExP = Null;
eInfo.Clptr = false;

MINIDUMP_CB_INFO cb;
cb.C = 0;
cb.cp = 0;

pMiniDumpWirteDump( getCurposs(), getCurpid(), xx, MiniDumpNormal, null? &eInfo : NULL, NULL, &cb);

closeHandle(xx);
}
freeLibrary(hDbgHelpDll)
  }
}


这个函数在被调用时生成一个DMP文件. 其中包含了调用栈和一些其他信息.

配合Structure Exception Handling技术,即可实现 "让程序在崩溃时体面的退出" 系列文章中描述的效果.

 

知道的越多,越觉得自己不知道的太多.这些技术可能在2002年以前就被使用了,我今天才了解,真是应该倍加努力.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值