您的位置:首页 > 其它

WinDbg分析DUMP文件

2015-04-03 20:44 471 查看
1. 如何生成dump文件?     原理:通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件;                SetUnhandledExceptionFilter:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SETUNHANDLEDEXCEPTIONFILTER);k(DevLang-%22C%2B%2B%22)&rd=true                MiniDumpWriteDump:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(MINIDUMPWRITEDUMP);k(DevLang-%22C%2B%2B%22)&rd=true     示例:   
#ifndef _DUMP_GENERATE_H_
#define _DUMP_GENERATE_H_

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

LONG WINAPI MyUnhandledExceptionFilter(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo);
void MyDumpGenerate();

void MyDumpGenerate()
{
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
}

LONG WINAPI MyUnhandledExceptionFilter(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo)
{
MessageBox(0,L"DumpGenerate",0,0);

HANDLE lhDumpFile = CreateFile(L"D:\\test.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);

MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
loExceptionInfo.ExceptionPointers = ExceptionInfo;
loExceptionInfo.ThreadId = GetCurrentThreadId();
loExceptionInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);

CloseHandle(lhDumpFile);

/*
* EXCEPTION_CONTINUE_SEARCH:将异常传给调试器
* EXCEPTION_EXECUTE_HANDLER:不显示错误信息
*/
return EXCEPTION_EXECUTE_HANDLER;
}

#endif // _DUMP_GENERATE_H_

////////////////
// main.cpp
int main()
{
MyDumpGenerate();
int* p = NULL;
*p = 1;
// 这里异常后,会自动调用MyUnhandledExceptionFilter接口,生成dump文件:test.dmp。
return 0;
}

 

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,然后可以定位到如下错误:           https://www.geek-share.com/detail/2485240640.html(此文转载,感谢作者的无私奉献)              3. 使用WinDbg调试程序:   待续...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: