DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
1. 如何生成dump文件?
    原理:通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件;
    示例:
  
复制代码
复制代码
 1 #ifndef _DUMP_GENERATE_H_
 2 #define _DUMP_GENERATE_H_
 3  
 4 #include <Windows.h>
 5 #include <DbgHelp.h>
 6 #pragma comment(lib, "DbgHelp.lib")
 7  
 8 LONG WINAPI MyUnhandledExceptionFilter(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo);
 9 void MyDumpGenerate();
10  
11 void MyDumpGenerate()
12 {
13  SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
14 }
15  
16 LONG WINAPI MyUnhandledExceptionFilter(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo)
17 {
18  MessageBox(0,L"DumpGenerate",0,0);
19  
20  HANDLE lhDumpFile = CreateFile(L"D:\\test.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
21  
22  MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
23  loExceptionInfo.ExceptionPointers = ExceptionInfo;
24  loExceptionInfo.ThreadId = GetCurrentThreadId();
25  loExceptionInfo.ClientPointers = TRUE;
26  MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
27  
28  CloseHandle(lhDumpFile);
29  
30  /*
31   * EXCEPTION_CONTINUE_SEARCH:将异常传给调试器
32   * EXCEPTION_EXECUTE_HANDLER:不显示错误信息
33   */
34  return EXCEPTION_EXECUTE_HANDLER;
35 }
36  
37 #endif // _DUMP_GENERATE_H_
38  
39 ////////////////
40 // main.cpp
41 int main()
42 {
43  MyDumpGenerate();
44  int* p = NULL;
45  *p = 1;
46  // 这里异常后,会自动调用MyUnhandledExceptionFilter接口,生成dump文件:test.dmp。
47  return 0;
48 }
复制代码
复制代码

 

2. 如何使用WinDbg调试dump文件,以test.dmp为例:
    2.1 准备步骤:
        2.1.1 设置pdb文件路径:
                
 
        2.1.2 设置源文件路径:
                
 
        2.1.3 导入/拖入test.dmp文件;
    
    2.2 通过命令(.reload -> ! analyze -v)来分析dump,然后可以定位到如下错误:
          http://www.cnblogs.com/ahuo/archive/2010/05/19/1739053.html(此文转载,感谢作者的无私奉献)
          
 
3. 使用WinDbg调试程序:
  待续...
posted on   DoubleLi  阅读(424)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示