qt中程序崩溃生成dump文件
来源:互联网 发布:福昕阅读器mac版 编辑:程序博客网 时间:2024/05/24 04:32
dumpfile.h
#pragma once#include <windows.h>#include < Dbghelp.h>#include <iostream> #include <vector> #include <tchar.h> using namespace std; #pragma comment(lib, "Dbghelp.lib")namespace NSDumpFile{ 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(); }};#define DeclareDumpFile() NSDumpFile::RunCrashHandler();
在mian函数中 添加DeclareDumpFile()
3 0
- qt中程序崩溃生成dump文件
- qt程序崩溃生成core dump
- 程序崩溃生成dump符号文件
- windows程序崩溃生成dump文件
- windows程序崩溃生成dump文件
- 程序崩溃时生成Dump文件
- 程序崩溃时生成DUMP文件
- windows程序崩溃生成dump文件
- Qt--让你的客户端崩溃之前生成dump文件
- Qt--让你的客户端崩溃之前生成dump文件
- C++程序崩溃生成dump
- 生成程序崩溃的dump文件,使用windbg调试
- 让程序崩溃时生成dump文件以供调试
- vc++程序崩溃后不生成dump文件
- windows下程序崩溃,生成dump文件分析
- 生成程序崩溃的dump文件,使用windbg调试
- vc++程序崩溃后不生成dump文件
- c++程序崩溃生成dump文件确定错误位置方法
- NSIS安装过程中判断程序是否运行中,FindProcDLL和KillProcDLL
- PGSQL简单的触发器的实例
- Progressive Web App模仿原生应用的Web应用
- Linux学习总结(24)——Linux查找文件命令
- JAVAWEB开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)
- qt中程序崩溃生成dump文件
- 正能量之职场压力
- Access2016学习9
- 23种设计模式——桥接模式
- 关于mysql数据库的几种密码修改方法
- adfa
- cloudera 管理员调整报警标题的两种方法
- 在Eclipse中显示.project和.classpath和.setting目录
- Unity BehaviorDesigner BehaviorTree 的Conditional Abort机制解读