Set generate Dump file on C + + Crash

The Dump file is the memory image of the process, which can save the execution state of the program to the Dump file through the debugger. The Dump f...

The Dump file is the memory image of the process, which can save the execution state of the program to the Dump file through the debugger. The Dump file is used by the driver writer to debug the driver, which must be opened with special tools, such as WinDbg and visual studio;

After our program is released, we can't trace the BUG of our own code on the client, so Dump file is particularly useful for us. We can reproduce the BUG situation through. dmp file, then reproduce the client environment (including stack call, etc.), set the source debugging path, and find the BUG statement;

The code for generating Dump file from C + + program settings is as follows:

#include "stdafx.h" #include "Windows.h" #include "DbgHelp.h" int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers) { // Define function pointer typedef BOOL(WINAPI * MiniDumpWriteDumpT)( HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, PMINIDUMP_EXCEPTION_INFORMATION, PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION ); // Get the MiniDumpWriteDump function from the dbgehelp.dll Library MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL; HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll")); if (NULL == hDbgHelp) { return EXCEPTION_CONTINUE_EXECUTION; } pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump"); if (NULL == pfnMiniDumpWriteDump) { FreeLibrary(hDbgHelp); return EXCEPTION_CONTINUE_EXECUTION; } // Create dmp file TCHAR szFileName[MAX_PATH] = ; TCHAR* szVersion = _T("DumpDemo_v1.0"); SYSTEMTIME stLocalTime; GetLocalTime(&stLocalTime); wsprintf(szFileName, L"%s-%04d%02d%02d-%02d%02d%02d.dmp", szVersion, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay, stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond); HANDLE hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0); if (INVALID_HANDLE_VALUE == hDumpFile) { FreeLibrary(hDbgHelp); return EXCEPTION_CONTINUE_EXECUTION; } // Write dmp file MINIDUMP_EXCEPTION_INFORMATION expParam; expParam.ThreadId = GetCurrentThreadId(); expParam.ExceptionPointers = pExceptionPointers; expParam.ClientPointers = FALSE; pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &expParam : NULL), NULL, NULL); // Release file CloseHandle(hDumpFile); FreeLibrary(hDbgHelp); return EXCEPTION_EXECUTE_HANDLER; } LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo) { // Here are some abnormal filtering or tips if (IsDebuggerPresent()) { return EXCEPTION_CONTINUE_SEARCH; } return GenerateMiniDump(lpExceptionInfo); } int main() { // Add crash dump file function SetUnhandledExceptionFilter(ExceptionFilter); // Crash the program to generate Dump file int *p = NULL; *p=1; }

Then compile the project and run the program, and you will find that the Dump file is generated in the current running directory, similar to dumpdemo ﹣ v1.0-20170602-154446.dmp;

5 November 2019, 12:08 | Views: 9170

Add new comment

For adding a comment, please log in
or create account

0 comments