summaryrefslogtreecommitdiff
path: root/zen/debug_new.cpp
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:39 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:39 +0200
commitd2854834e18443876c8f75e0a7f3b88d1d549fc4 (patch)
treee967b628081e50abc7c34cd264e6586271c7e728 /zen/debug_new.cpp
parent4.1 (diff)
downloadFreeFileSync-d2854834e18443876c8f75e0a7f3b88d1d549fc4.tar.gz
FreeFileSync-d2854834e18443876c8f75e0a7f3b88d1d549fc4.tar.bz2
FreeFileSync-d2854834e18443876c8f75e0a7f3b88d1d549fc4.zip
4.2
Diffstat (limited to 'zen/debug_new.cpp')
-rw-r--r--zen/debug_new.cpp49
1 files changed, 22 insertions, 27 deletions
diff --git a/zen/debug_new.cpp b/zen/debug_new.cpp
index c830a36b..2017dcd2 100644
--- a/zen/debug_new.cpp
+++ b/zen/debug_new.cpp
@@ -6,7 +6,7 @@
#include "debug_new.h"
-#include "win.h" //includes "windows.h"
+#include "win.h" //includes "windows.h"
#include "DbgHelp.h" //available for MSC only
#pragma comment(lib, "Dbghelp.lib")
@@ -16,35 +16,30 @@ namespace
LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo)
{
HANDLE hFile = ::CreateFile(L"exception.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-
- MINIDUMP_EXCEPTION_INFORMATION exInfo = {};
- exInfo.ThreadId = ::GetCurrentThreadId();
- exInfo.ExceptionPointers = pExceptionInfo;
- exInfo.ClientPointers = NULL;
-
- MINIDUMP_EXCEPTION_INFORMATION* exceptParam = pExceptionInfo ? &exInfo : NULL;
-
- ::MiniDumpWriteDump(::GetCurrentProcess(), //__in HANDLE hProcess,
- ::GetCurrentProcessId(), //__in DWORD ProcessId,
- hFile, //__in HANDLE hFile,
- MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory
- exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
- NULL, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
- NULL); //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
-
- ::CloseHandle(hFile);
-
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+ MINIDUMP_EXCEPTION_INFORMATION exInfo = {};
+ exInfo.ThreadId = ::GetCurrentThreadId();
+ exInfo.ExceptionPointers = pExceptionInfo;
+
+ MINIDUMP_EXCEPTION_INFORMATION* exceptParam = pExceptionInfo ? &exInfo : NULL;
+
+ /*bool rv = */
+ ::MiniDumpWriteDump(::GetCurrentProcess(), //__in HANDLE hProcess,
+ ::GetCurrentProcessId(), //__in DWORD ProcessId,
+ hFile, //__in HANDLE hFile,
+ MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory
+ exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
+ NULL, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
+ NULL); //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
+
+ ::CloseHandle(hFile);
+ }
return EXCEPTION_EXECUTE_HANDLER;
}
-
-struct WriteDumpOnUnhandledException
-{
- WriteDumpOnUnhandledException()
- {
- ::SetUnhandledExceptionFilter(writeDumpOnException);
- }
-} dummy; //ensure that a dump-file is written for uncaught exceptions
+//ensure that a dump-file is written for uncaught exceptions
+struct Dummy { Dummy() { ::SetUnhandledExceptionFilter(writeDumpOnException); }} dummy;
}
bgstack15