利用 dbghelp.dll 生成 dump 文件
生活随笔
收集整理的這篇文章主要介紹了
利用 dbghelp.dll 生成 dump 文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
dbghelp.dll
windows的系統目錄system32下,都有dbghelp.dll,但在實際使用時,往往會讓exe加載自己目錄下的dll,以避免系統目錄下的dll版本不一導致的程序異常。
故一般都是用LoadLibrary()的方式加載Dll,先加載當前目錄,不存在時加載系統目錄。
HMODULE hDll = ::LoadLibrary(szDllPath);
MiniDumpWriteDump
該函數為DbgHelp.dll 導出函數,使用它生成dump文件。
BOOL WINAPI MiniDumpWriteDump(__in HANDLE hProcess,__in DWORD ProcessId,__in HANDLE hFile,__in MINIDUMP_TYPE DumpType,__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam );通過?GetProcAddress() 獲取?MiniDumpWriteDump() 函數指針,如下:
typedef BOOL (WINAPI* MINIDUMPWRITEDUMP)(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,PMINIDUMP_CALLBACK_INFORMATION CallbackParam );MINIDUMPWRITEDUMP pFuncWriteDump = NULL; pFuncWriteDump = (MINIDUMPWRITEDUMP)::GetProcAddress(hDll, "MiniDumpWriteDump");創建dump文件File:
HANDLE hDump = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);生成dump文件:
MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;loExceptionInfo.ExceptionPointers = ExceptionInfo;loExceptionInfo.ThreadId = GetCurrentThreadId();loExceptionInfo.ClientPointers = TRUE;BOOL bRes = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);CloseHandle(lhDumpFile);ExceptionInfo 是程序的異常信息,UnhandledExceptionFilter() 函數的唯一參數類型,所以可以在 UnhandledExceptionFilter() 函數內生成Dump文件。
記得最后CloseHandle ?文件句柄。
?
?
轉載于:https://www.cnblogs.com/johnice/archive/2013/01/06/2847654.html
總結
以上是生活随笔為你收集整理的利用 dbghelp.dll 生成 dump 文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: More Effective C++ (
- 下一篇: 艾贴多少钱一盒啊?