程序崩溃时,调用DbgHelp生成minidump文件
来源:互联网 发布:公务员数学题软件 编辑:程序博客网 时间:2024/05/20 03:41
用到dbghelp.lib和dbghelp.dll文件,生成minidump文件,直接看代码:
#include <iostream>#include <windows.h>#include <dbghelp.h>#pragma comment(lib, "dbghelp.lib")static LONG WINAPI pfnUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo){if (IsDebuggerPresent()){return EXCEPTION_CONTINUE_SEARCH;}typedef BOOL(WINAPI* MiniDumpWriteDumpT)(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,PMINIDUMP_EXCEPTION_INFORMATION,PMINIDUMP_USER_STREAM_INFORMATION,PMINIDUMP_CALLBACK_INFORMATION);HMODULE hDbgHelp = LoadLibrary("dbghelp.dll");if (NULL == hDbgHelp){return EXCEPTION_CONTINUE_EXECUTION;}SYSTEMTIME stSysTime;memset(&stSysTime, 0, sizeof(SYSTEMTIME));GetLocalTime(&stSysTime);TCHAR szFile[MAX_PATH] = { 0 };//根据字符集,有时候可能为WCHARwsprintf(szFile, "%0.4d-%0.2d-%0.2d-%0.2d-%0.2d-%0.2d-%0.3d.dmp",\stSysTime.wYear, stSysTime.wMonth, stSysTime.wDay, stSysTime.wHour,\stSysTime.wMinute, stSysTime.wSecond, stSysTime.wMilliseconds);HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,\0, CREATE_ALWAYS, 0, 0);if (INVALID_HANDLE_VALUE != hFile){MINIDUMP_EXCEPTION_INFORMATION objExInfo;objExInfo.ThreadId = ::GetCurrentThreadId();objExInfo.ExceptionPointers = pExceptionInfo;objExInfo.ClientPointers = NULL;BOOL bOk = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,\MiniDumpWithDataSegs, (pExceptionInfo ? &objExInfo : NULL), NULL, NULL);CloseHandle(hFile);}FreeLibrary(hDbgHelp);return EXCEPTION_EXECUTE_HANDLER;}int main(int argc, char** argv){SetUnhandledExceptionFilter(pfnUnhandledExceptionFilter);int* pTest = NULL;*pTest = 1;char* pFileName = "./test.txt";WCHAR wszFileName[MAX_PATH] = { 0 };MultiByteToWideChar(CP_ACP, 0, pFileName, strlen(pFileName) + 1, wszFileName, sizeof(wszFileName) / sizeof(wszFileName[0]));getchar();return 0;}
另外一种做法:
#include <iostream>#include <windows.h>#include <dbghelp.h>#pragma comment(lib, "dbghelp.lib")static LONG WINAPI pfnUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo){if (IsDebuggerPresent()){return EXCEPTION_CONTINUE_SEARCH;}typedef BOOL(WINAPI* MiniDumpWriteDumpT)(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,PMINIDUMP_EXCEPTION_INFORMATION,PMINIDUMP_USER_STREAM_INFORMATION,PMINIDUMP_CALLBACK_INFORMATION);HMODULE hDbgHelp = LoadLibrary("dbghelp.dll");if (NULL == hDbgHelp){return EXCEPTION_CONTINUE_EXECUTION;}MiniDumpWriteDumpT pfnMinidumpWriteDump = NULL;pfnMinidumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");if (NULL == pfnMinidumpWriteDump){FreeLibrary(hDbgHelp);return EXCEPTION_CONTINUE_EXECUTION;}SYSTEMTIME stSysTime;memset(&stSysTime, 0, sizeof(SYSTEMTIME));GetLocalTime(&stSysTime);TCHAR szFile[MAX_PATH] = { 0 };//根据字符集,有时候可能为WCHARwsprintf(szFile, "%0.4d-%0.2d-%0.2d-%0.2d-%0.2d-%0.2d-%0.3d.dmp",\stSysTime.wYear, stSysTime.wMonth, stSysTime.wDay, stSysTime.wHour,\stSysTime.wMinute, stSysTime.wSecond, stSysTime.wMilliseconds);HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,\0, CREATE_ALWAYS, 0, 0);if (INVALID_HANDLE_VALUE != hFile){MINIDUMP_EXCEPTION_INFORMATION objExInfo;objExInfo.ThreadId = ::GetCurrentThreadId();objExInfo.ExceptionPointers = pExceptionInfo;objExInfo.ClientPointers = NULL;BOOL bOk = pfnMinidumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,\MiniDumpWithDataSegs, (pExceptionInfo ? &objExInfo : NULL), NULL, NULL);CloseHandle(hFile);}FreeLibrary(hDbgHelp);return EXCEPTION_EXECUTE_HANDLER;}
阅读全文
0 0
- 程序崩溃时,调用DbgHelp生成minidump文件
- 让程序崩溃时自动写minidump
- 程序崩溃时自动记录minidump的c++类
- 程序崩溃时自动记录minidump的c++类
- 程序崩溃时自动记录minidump的c++类
- 程序崩溃时生成Dump文件
- 程序崩溃时生成DUMP文件
- 让程序崩溃时生成dump文件以供调试
- C++程序崩溃时,生成dmp调试文件
- 捕获异常并生成minidump文件
- MiniDump文件的生成(一)
- MiniDump文件的生成(二)
- MiniDump文件的生成(三)
- minidump-DMP文件的生成和使用
- 程序崩溃生成dump符号文件
- windows程序崩溃生成dump文件
- windows 程序崩溃生成dmp文件
- windows程序崩溃生成dump文件
- WebUploader获取文件上传成功路径问题
- Java接口的修饰符可以为()
- Android嵌入式开发之NDK初级入门 粘贴可用阅读可懂
- 导入idea配置,启动tomcat报错 CreateProcess error=2
- 【Django】urls.py中patterns后的第一个参数(1.8版本之前)
- 程序崩溃时,调用DbgHelp生成minidump文件
- UDP 组播---你需要了解这些
- c3p0所有版本免费下载地址
- 删除双系统(Ubuntu+Win7)中的Ubuntu之后,win7不能启动的问题
- 写一个ssm项目练练手吧
- codeblocks快捷键(转载)
- [技巧分享-打印机设置]在局域网内设置共享打印机
- angular2_引入第三方文件之swiper的引入
- 攻击多个目标