aboutsummaryrefslogtreecommitdiff
path: root/primedev/logging/crashhandler.h
diff options
context:
space:
mode:
authorJack <66967891+ASpoonPlaysGames@users.noreply.github.com>2023-12-27 00:32:01 +0000
committerGitHub <noreply@github.com>2023-12-27 01:32:01 +0100
commitf5ab6fb5e8be7b73e6003d4145081d5e0c0ce287 (patch)
tree90f2c6a4885dbd181799e2325cf33588697674e1 /primedev/logging/crashhandler.h
parentbb8ed59f6891b1196c5f5bbe7346cd171c8215fa (diff)
downloadNorthstarLauncher-f5ab6fb5e8be7b73e6003d4145081d5e0c0ce287.tar.gz
NorthstarLauncher-f5ab6fb5e8be7b73e6003d4145081d5e0c0ce287.zip
Folder restructuring from primedev (#624)v1.21.2-rc3v1.21.2
Copies of over the primedev folder structure for easier cherry-picking of further changes Co-authored-by: F1F7Y <filip.bartos07@proton.me>
Diffstat (limited to 'primedev/logging/crashhandler.h')
-rw-r--r--primedev/logging/crashhandler.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/primedev/logging/crashhandler.h b/primedev/logging/crashhandler.h
new file mode 100644
index 00000000..c059a8ca
--- /dev/null
+++ b/primedev/logging/crashhandler.h
@@ -0,0 +1,97 @@
+#pragma once
+
+#include <mutex>
+
+//-----------------------------------------------------------------------------
+// Purpose: Exception handling
+//-----------------------------------------------------------------------------
+class CCrashHandler
+{
+public:
+ CCrashHandler();
+ ~CCrashHandler();
+
+ void Init();
+ void Shutdown();
+
+ void Lock()
+ {
+ m_Mutex.lock();
+ }
+
+ void Unlock()
+ {
+ m_Mutex.unlock();
+ }
+
+ void SetState(bool bState)
+ {
+ m_bState = bState;
+ }
+
+ bool GetState() const
+ {
+ return m_bState;
+ }
+
+ void SetAllFatal(bool bState)
+ {
+ m_bAllExceptionsFatal = bState;
+ }
+
+ bool GetAllFatal() const
+ {
+ return m_bAllExceptionsFatal;
+ }
+
+ //-----------------------------------------------------------------------------
+ // Exception helpers
+ //-----------------------------------------------------------------------------
+ void SetExceptionInfos(EXCEPTION_POINTERS* pExceptionPointers);
+
+ void SetCrashedModule();
+
+ const CHAR* GetExceptionString() const;
+ const CHAR* GetExceptionString(DWORD dwExceptionCode) const;
+
+ bool IsExceptionFatal() const;
+ bool IsExceptionFatal(DWORD dwExceptionCode) const;
+
+ //-----------------------------------------------------------------------------
+ // Formatting
+ //-----------------------------------------------------------------------------
+ void ShowPopUpMessage();
+
+ void FormatException();
+ void FormatCallstack();
+ void FormatFlags(const CHAR* pszRegister, DWORD nValue);
+ void FormatIntReg(const CHAR* pszRegister, DWORD64 nValue);
+ void FormatFloatReg(const CHAR* pszRegister, M128A nValue);
+ void FormatRegisters();
+ void FormatLoadedMods();
+ void FormatLoadedPlugins();
+ void FormatModules();
+
+ //-----------------------------------------------------------------------------
+ // Minidump
+ //-----------------------------------------------------------------------------
+ void WriteMinidump();
+
+private:
+ PVOID m_hExceptionFilter;
+ EXCEPTION_POINTERS* m_pExceptionInfos;
+
+ bool m_bHasSetConsolehandler;
+ bool m_bAllExceptionsFatal;
+ bool m_bHasShownCrashMsg;
+ bool m_bState;
+
+ std::string m_svCrashedModule;
+ std::string m_svCrashedOffset;
+
+ std::string m_svError;
+
+ std::mutex m_Mutex;
+};
+
+extern CCrashHandler* g_pCrashHandler;