c++ windows程序崩溃生成转储dump
来源:互联网 发布:极乐净土相机数据 编辑:程序博客网 时间:2024/05/16 05:09
CrashDump.h
#pragma once#include <windows.h>#include < Dbghelp.h>#include <tchar.h> void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException);LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);BOOL PreventSetUnhandledExceptionFilter();LONG WINAPI UnhandledExceptionFilterEx(struct _EXCEPTION_POINTERS *pException);void RunCrashHandler();
CrashDump.h
#include "CrashDump.h"#pragma comment(lib, "Dbghelp.lib")void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException){ // 创建Dump文件 // HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Dump信息 // MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ExceptionPointers = pException; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ClientPointers = TRUE; // 写入Dump文件内容 // MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL); CloseHandle(hDumpFile);}LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter){ return NULL;}BOOL PreventSetUnhandledExceptionFilter(){ HMODULE hKernel32 = LoadLibrary(_T("kernel32.dll")); if (hKernel32 == NULL) return FALSE; void *pOrgEntry = GetProcAddress(hKernel32, "SetUnhandledExceptionFilter"); if (pOrgEntry == NULL) return FALSE; unsigned char newJump[100]; DWORD dwOrgEntryAddr = (DWORD)pOrgEntry; dwOrgEntryAddr += 5; // add 5 for 5 op-codes for jmp far void *pNewFunc = &MyDummySetUnhandledExceptionFilter; DWORD dwNewEntryAddr = (DWORD)pNewFunc; DWORD dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr; newJump[0] = 0xE9; // JMP absolute memcpy(&newJump[1], &dwRelativeAddr, sizeof(pNewFunc)); SIZE_T bytesWritten; BOOL bRet = WriteProcessMemory(GetCurrentProcess(), pOrgEntry, newJump, sizeof(pNewFunc) + 1, &bytesWritten); return bRet;}LONG WINAPI UnhandledExceptionFilterEx(struct _EXCEPTION_POINTERS *pException){ TCHAR szMbsFile[MAX_PATH] = { 0 }; ::GetModuleFileName(NULL, szMbsFile, MAX_PATH); TCHAR* pFind = _tcsrchr(szMbsFile, '\\'); if (pFind) { *(pFind + 1) = 0; _tcscat(szMbsFile, _T("CrashDumpFile.dmp")); CreateDumpFile(szMbsFile, pException); } // TODO: MiniDumpWriteDump FatalAppExit(-1, _T("Fatal Error")); return EXCEPTION_CONTINUE_SEARCH;}void RunCrashHandler(){ SetUnhandledExceptionFilter(UnhandledExceptionFilterEx); PreventSetUnhandledExceptionFilter();}
网上找的,连接忘记了
0 0
- c++ windows程序崩溃生成转储dump
- windows程序崩溃生成dump文件
- windows程序崩溃生成dump文件
- windows程序崩溃生成dump文件
- windows下程序崩溃,生成dump文件分析
- C++程序崩溃生成dump
- Linux C 让程序崩溃后生成Core Dump
- Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
- 程序崩溃生成dump符号文件
- 让程序崩溃后生成Core Dump
- 让程序崩溃后生成Core Dump
- 程序崩溃时生成Dump文件
- 程序崩溃时生成DUMP文件
- qt中程序崩溃生成dump文件
- qt程序崩溃生成core dump
- windows程序中生成崩溃转储文件(.dmp)
- 生成程序崩溃的dump文件,使用windbg调试
- 让程序崩溃时生成dump文件以供调试
- HDU1598-find the most comfortable road
- linux系统时间问题
- 浅谈PHP中6种GET和POST请求发送方法
- c#写入日期信息到excel中
- 用Java实现文件上传
- c++ windows程序崩溃生成转储dump
- 黑马程序员——————java基础
- unity3d 小地图的实现 脚本代码
- 非URL转发实现域名跳转
- 九度oj 1062
- Lua语言基础
- intellij idea 公众号开发 微信自定义菜单 中文乱码 问题的解决
- linux /etc/sudoers 文件说明
- 爸爸去哪儿4对父子在圆桌上共有多少种坐法