VS2010+minidump定位崩溃位置_铽可喏_新浪博客

1.       包含头文件和库文件

  #include 《dbghelp.h》
  #include 《strsafe.h》

#pragma comment( lib, "Dbghelp.lib" )

 

2.       处理异常崩溃的代码,需要是全局的。

 

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

 

1.  long __stdcall GenerateDump(EXCEPTION_POINTERS* pExceptionPointers)

2.  {

3.  BOOL bMiniDumpSuccessful;

4.  WCHAR szPath[MAX_PATH];

5.  WCHAR szFileName[MAX_PATH];

6.  WCHAR* szAppName = L"StationMonitor";

7.  WCHAR* szVersion = L"v2.1.5";

8.  DWORD dwBufferSize = MAX_PATH;

9.  HANDLE hDumpFile;

10. SYSTEMTIME stLocalTime;

11. MINIDUMP_EXCEPTION_INFORMATION ExpParam;

12. 

13. GetLocalTime( &stLocalTime );

14. GetTempPath( dwBufferSize, szPath );

15. 

16. StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName );

17. CreateDirectory( szFileName, NULL );

18. 

19. StringCchPrintf( szFileName, MAX_PATH, L"%s%s\\%s-ddd-ddd-%ld-%ld.dmp",

20.    szPath, szAppName, szVersion,

21.    stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,

22.    stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,

23.    GetCurrentProcessId(), GetCurrentThreadId());

24. hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,

25.    FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);

26. 

27. ExpParam.ThreadId = GetCurrentThreadId();

28. ExpParam.ExceptionPointers = pExceptionPointers;

29. ExpParam.ClientPointers = TRUE;

30. 

31. bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),

32.    hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL, NULL);

33. 

34. return EXCEPTION_EXECUTE_HANDLER;

35.}

 

 

 

3.       设置捕获异常的处理函数

SetUnhandledExceptionFilter(GenerateDump);

 

4.       配置工程信息

右键项目名称/属性/C/C++/调试信息格式,设置为程序数据库(/Zi;

链接器/调试/生成调试信息 设置为Yes

链接器/优化/引用 设置为是(/OPT:REF,启用COMDAT折叠 设置为 是(/OPT:ICF

 

5.       异常调试

将同一源码版本的*.exe*.pdb*.dmp,放在源码的同一个目录下,双击dmp文件,打开VS2010,点击页面上的调试功能,即可定位到故障行代码。

最方便的方式是,将生成的dmp文件,拷贝到源码中Release或者Debug(源码中生成exe为文件夹)。

 

参考文档:

1.       https://www.cnblogs.com/lisuyun/p/5245609.html

2.       https://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx#writing_a_minidump

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值