#include <windows.h>
#include <DbgHelp.h>
#pragma comment ( lib , "dbghelp.lib")
// 内存Dump回调函数
static LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
char lpModuleDir[MAX_PATH] = {0};
TCHAR szFileName[MAX_PATH] = {0};
HANDLE hFile;
SYSTEMTIME st = {0};
GetLocalTime(&st);
//cutil_file_GetModuleDir(g_hDllModule, lpModuleDir);
sprintf(szFileName, _T("%s\\Huan_%04d%02d%02d%02d.dmp"), "E:\\", st.wYear, st.wMonth, st.wDay, st.wHour);
DebugOut("开始记录dump");
hFile = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL );
if (hFile!=INVALID_HANDLE_VALUE)
{
MINIDUMP_EXCEPTION_INFORMATION ExInfo;
memset(&ExInfo, 0, sizeof(ExInfo));
ExInfo.ThreadId = GetCurrentThreadId();
ExInfo.ExceptionPointers = pExceptionInfo;
ExInfo.ClientPointers = FALSE;
MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hFile,
MiniDumpWithDataSegs, &ExInfo, NULL, NULL );
CloseHandle(hFile);
}
printf("dump记录完毕");
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char *argv[])
{
// 设置内存崩溃转储
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
int * p = NULL;
*p = 123;
system("pause");
return 0;
}
Windows代码内存崩溃转储示例
最新推荐文章于 2022-12-20 19:36:55 发布