Add a CMake option for generating mini dumps

Armin Burgmeier 2011-01-02 01:20:52 +01:00
parent db2d9d7257
commit ffe24d471a
3 changed files with 23 additions and 8 deletions

View File

@ -31,9 +31,12 @@ if(WIN32)
else()
endif()
option(GENERATE_MINI_DUMP "Generate a minidump on crash" ON)
else()
SET(USE_DIRECTX OFF)
SET(HAVE_FMOD OFF)
SET(GENERATE_MINI_DUMP OFF)
endif()
if(UNIX AND NOT USE_SDL_MAINLOOP AND NOT APPLE)
option(USE_X11 "Use X11 to create windows etc." ON)
@ -951,6 +954,15 @@ elseif(MINGW)
target_link_libraries(clonk iberty)
endif()
CHECK_INCLUDE_FILE_CXX(getopt.h HAVE_GETOPT_H)
if(GENERATE_MINI_DUMP)
FIND_PATH(DBGHELP_INCLUDE_DIR NAMES dbghelp.h)
FINDLIB(DBGHELP_LIBRARIES NAMES dbghelp)
target_link_libraries(clonk ${DBGHELP_LIBRARIES})
include_directories(${DBGHELP_INCLUDE_DIR})
endif()
if(USE_GL)
include(FindOpenGL)
FINDLIB(GLEW_LIBRARIES NAMES GLEW glew32 glew32s)

View File

@ -198,4 +198,7 @@
#cmakedefine HAVE_NULLPTR 1
/* Use Apple Cocoa for the UI */
#cmakedefine USE_COCOA 1
#cmakedefine USE_COCOA 1
/* Generate minidumps on crash */
#cmakedefine GENERATE_MINI_DUMP 1

View File

@ -35,10 +35,6 @@
#ifdef _WIN32
#include <shellapi.h>
#if defined(_MSC_VER) && !defined(_DEBUG)
//#define GENERATE_MINI_DUMP
#endif
#ifdef GENERATE_MINI_DUMP
// Dump generation on crash
@ -48,7 +44,7 @@
static bool FirstCrash = true;
int GenerateDump(EXCEPTION_POINTERS* pExceptionPointers)
WINAPI LONG GenerateDump(EXCEPTION_POINTERS* pExceptionPointers)
{
if (!FirstCrash) return EXCEPTION_EXECUTE_HANDLER;
FirstCrash = false;
@ -84,7 +80,11 @@ int WINAPI WinMain (HINSTANCE hInst,
_CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ) | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
#ifdef GENERATE_MINI_DUMP
#if defined(GENERATE_MINI_DUMP) && !defined(_MSC_VER)
SetUnhandledExceptionFilter(GenerateDump);
#endif
#if defined(GENERATE_MINI_DUMP) && defined(_MSC_VER)
__try
{
#endif
@ -127,7 +127,7 @@ int WINAPI WinMain (HINSTANCE hInst,
// Return exit code
if (!Game.GameOver) return C4XRV_Aborted;
return C4XRV_Completed;
#ifdef GENERATE_MINI_DUMP
#if defined(GENERATE_MINI_DUMP) && defined(_MSC_VER)
} __except(GenerateDump(GetExceptionInformation())) { return C4XRV_Failure; }
#endif
}