WinDbg分析DUMP文件


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調試程序:
  待續...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM