抓取dump的头文件
来源:互联网 发布:新浪微博pv和uv数据 编辑:程序博客网 时间:2024/05/16 06:01
//文件名:DumpModule.h
//使用说明:此文件是一个抓取程序出现异常时dump的头文件,使用时只需要包含就可以了,如果程序出现异常就会生成一个dump文件,在可执行文件的相同目录。
#if !defined(_DUMPMODULE_H_FBFFBA7D_971E_48e0_A589_6FD14E8965B6)
#define _DUMPMODULE_H_FBFFBA7D_971E_48e0_A589_6FD14E8965B6#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include <Windows.h>
#include <ImageHlp.h>
#include <Shlwapi.h>
#pragma comment(lib, "DbgHelp.lib")
#pragma comment(lib, "Shlwapi.lib")
inline BOOL IsDataSectionNeeded(LPCWSTR pModuleName)
{
BOOL bReturn(FALSE);
if(pModuleName)
{
LPCWSTR pFileName = PathFindFileNameW(pModuleName);
if(!lstrcmpiW(pFileName, L"ntdll.dll"))
{
bReturn = TRUE;
}
}
return bReturn;
}
inline BOOL CALLBACK MiniDumpCallback(PVOID pParam, PMINIDUMP_CALLBACK_INPUT pInput, PMINIDUMP_CALLBACK_OUTPUT pOutput)
{
BOOL bReturn(FALSE);
if(pInput && pOutput)
{
switch(pInput->CallbackType)
{
case ModuleCallback:
{
if(pOutput->ModuleWriteFlags & ModuleWriteDataSeg)
{
if(!IsDataSectionNeeded(pInput->Module.FullPath))
{
pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);
}
}
}
case IncludeModuleCallback:
case IncludeThreadCallback:
case ThreadCallback:
case ThreadExCallback:
{
bReturn = TRUE;
}
default:break;
}
}
return bReturn;
}
inline void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCTSTR pszFileName)
{
HANDLE hFile = CreateFile(pszFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = FALSE;
MINIDUMP_CALLBACK_INFORMATION mci;
mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;
mci.CallbackParam = 0;
MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |
MiniDumpWithDataSegs |
MiniDumpWithHandleData |
0x00000800 /*MiniDumpWithFullMemoryInfo*/ |
0x00001000 /*MiniDumpWithThreadInfo*/ |
MiniDumpWithUnloadedModules);
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, mdt, (pep) ? &mdei : 0, 0, &mci);
CloseHandle(hFile);
}
}
inline LONG WINAPI GPTUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
SYSTEMTIME st = {0};
::GetLocalTime(&st);
TCHAR exeFullPath[MAX_PATH] = {0};
GetModuleFileName(NULL, exeFullPath, MAX_PATH);
PathRemoveExtension(exeFullPath);
TCHAR dmpFullPath[MAX_PATH] = {0};
wsprintf(dmpFullPath, _T("%s%04d%02d%02d%02d%02d%02d.dmp"), exeFullPath, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
CreateMiniDump(pExceptionInfo, dmpFullPath);
return EXCEPTION_CONTINUE_SEARCH;
}
extern "C" __declspec(selectany) LPTOP_LEVEL_EXCEPTION_FILTER g_pExcepFilter = SetUnhandledExceptionFilter(GPTUnhandledExceptionFilter);
#pragma comment(linker, "/include:_g_pExcepFilter")
#endif // !defined(_DUMPMODULE_H_FBFFBA7D_971E_48e0_A589_6FD14E8965B6)
0 0
- 抓取dump的头文件
- Dump文件的抓取和分析
- 抓取dump文件
- dump文件抓取方法
- 抓取虚拟机DUMP文件
- 8.oracle的dump理解八 dump文件头
- 9.oracle的dump理解九 dump REDO文件头
- 10.oracle的dump理解十 dump CONTROL文件头
- 使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump
- 如何手工抓取dump文件
- 如何手工抓取dump文件
- 如何手工抓取dump文件
- WinDbg-如何抓取dump文件
- WinDbg-如何抓取dump文件
- WinDbg-如何抓取dump文件
- WinDbg-如何抓取dump文件
- WinDbg-如何抓取dump文件
- WinDbg-如何抓取dump文件
- HDU 4998 Rotate 平面旋转
- 搜索自己博客中的文章
- iOS 通过16进制计算颜色
- 青光眼的原因与青光眼治疗
- FPGA设计--数字的表示形式(代码+波形图)
- 抓取dump的头文件
- jQuery EasyUI 为Combo,Combobox添加清除值功能
- AWR
- exp指数实现
- 框架学习七-1:ViewPager+Fragment之Fragment介绍
- leetcode - Unique Paths II
- eclipse开两个控制台分别打印两个进程的输出
- Search Insert Position
- 总弹出Visual Studio实时调试器的问题