diff --git a/cnc-ddraw.vcxproj b/cnc-ddraw.vcxproj
index d58bc6c..aea7ddb 100644
--- a/cnc-ddraw.vcxproj
+++ b/cnc-ddraw.vcxproj
@@ -167,7 +167,7 @@
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
-      <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
     </Link>
     <PostBuildEvent>
@@ -214,7 +214,7 @@ if exist "$(LocalDebuggerCommand)" if exist "$(LocalDebuggerWorkingDirectory)"
       <SubSystem>Windows</SubSystem>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
     </Link>
   </ItemDefinitionGroup>
diff --git a/inc/debug.h b/inc/debug.h
index de42ee0..37475c5 100644
--- a/inc/debug.h
+++ b/inc/debug.h
@@ -4,7 +4,7 @@
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
-
+int dbg_exception_handler(EXCEPTION_POINTERS* exception);
 void dbg_counter_start();
 double dbg_counter_stop();
 void dbg_debug_string(const char *format, ...);
diff --git a/src/debug.c b/src/debug.c
index bf23214..ff43323 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -1,4 +1,5 @@
 #include <windows.h>
+#include <dbghelp.h>>
 #include <stdio.h>
 #include "dd.h"
 #include "ddraw.h"
@@ -12,6 +13,37 @@ DWORD g_dbg_frame_count = 0;
 static LONGLONG g_dbg_counter_start_time = 0;
 static double g_dbg_counter_freq = 0.0;
 
+#if _DEBUG 
+int dbg_exception_handler(EXCEPTION_POINTERS* exception)
+{
+    HANDLE dmp =
+        CreateFile(
+            "cnc-ddraw.dmp",
+            GENERIC_READ | GENERIC_WRITE,
+            FILE_SHARE_WRITE | FILE_SHARE_READ,
+            0,
+            CREATE_ALWAYS,
+            0,
+            0);
+
+    MINIDUMP_EXCEPTION_INFORMATION info;
+    info.ThreadId = GetCurrentThreadId();
+    info.ExceptionPointers = exception;
+    info.ClientPointers = TRUE;
+
+    MiniDumpWriteDump(
+        GetCurrentProcess(),
+        GetCurrentProcessId(),
+        dmp,
+        0,
+        &info,
+        NULL,
+        NULL);
+
+    return EXCEPTION_EXECUTE_HANDLER;
+}
+#endif
+
 void dbg_init()
 {
     static int stdout_open = 0;
diff --git a/src/dllmain.c b/src/dllmain.c
index a453249..a03c32f 100644
--- a/src/dllmain.c
+++ b/src/dllmain.c
@@ -32,6 +32,7 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
 #if _DEBUG 
         dbg_init();
         dprintf("cnc-ddraw = %p\n", hDll);
+        SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)dbg_exception_handler);
 #endif
         g_ddraw_module = hDll;