- Debug EXE
- Friday, August 24th, 2007 at 11:20:04am MDT
- SceneHandler *GELEngine = NULL;
- LONG WINAPI TopLevelFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
- {
- LONG rc = EXCEPTION_CONTINUE_SEARCH;
- HMODULE DllHandle = NULL;
- String DumpFileName;
- String ErrorMessage;
- MINIDUMPWRITEDUMP MiniDump;
- HANDLE DumpFile;
- char Str[MAX_PATH];
- bool ReadyToReport = false;
- if (GetModuleFileName(NULL, Str, MAX_PATH))
- {
- // Get the Absolute Path of the EXE and put the DumpFile.dmp there.
- PathRemoveFileSpec(Str);
- DumpFileName = Str;
- DumpFileName.append("\\CrashReport.dmp");
- }
- // Load the Debug Help library to help us with a stack trace
- DllHandle = LoadLibrary("DBGHELP.DLL");
- if (DllHandle)
- {
- // Get the address of the MiniDumpWriteDump() function inside the library
- MiniDump = (MINIDUMPWRITEDUMP) GetProcAddress(DllHandle, "MiniDumpWriteDump");
- if (MiniDump)
- {
- // create the file
- DumpFile = CreateFile(DumpFileName.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- if (DumpFile != INVALID_HANDLE_VALUE)
- {
- MINIDUMP_EXCEPTION_INFORMATION ExInfo;
- ExInfo.ThreadId = GetCurrentThreadId();
- ExInfo.ExceptionPointers = ExceptionInfo;
- ExInfo.ClientPointers = NULL;
- // Write the information into the dump
- if (MiniDump(GetCurrentProcess(), GetCurrentProcessId(), DumpFile, MiniDumpNormal, &ExInfo, NULL, NULL))
- {
- ReadyToReport = true;
- rc = EXCEPTION_EXECUTE_HANDLER;
- }else{
- ErrorMessage = "Failed to save dump file to CrashReport.dmp.";
- }
- CloseHandle(DumpFile);
- if (ReadyToReport)
- {
- // **********Report that a crash has happened**********
- }
- }else{
- ErrorMessage = "Cannot create CrashReport.dmp. File I/O error!";
- }
- }else{
- ErrorMessage = "Failed to attach to MiniDumpWriteDump(). DBGHELP.DLL might be too old?";
- }
- }else{
- ErrorMessage = "DBGHELP.DLL not found.";
- }
- if (ErrorMessage.size() > 0)
- {
- MessageBox(NULL, ErrorMessage.c_str(), GEL_ENGINE_NAME, MB_OK);
- }
- return rc;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- #ifdef _DEBUG
- _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF);
- #endif
- __try
- {
- // Attempt to create a Game Object
- GELEngine = new SceneHandler(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
- // Run the Game
- if (GELEngine)
- {
- GELEngine->Loop();
- // Delete the Game Engine
- SAFE_DELETE(GELEngine);
- }
- } __except(TopLevelFilter(GetExceptionInformation()))
- {
- // An Error has occurred, delete the objects in memory
- if (GELEngine)
- {
- // Delete the Game Engine
- SAFE_DELETE(GELEngine);
- }
- return 0;
- }
- #ifdef _DEBUG
- if (_CrtDumpMemoryLeaks())
- {
- MessageBox(NULL, "Memory Leak Detected!", "Warning!", MB_OK);
- }
- #endif
- return 0;
- }
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.