1#ifndef _WHEATYEXCEPTIONREPORT_
2#define _WHEATYEXCEPTIONREPORT_
18#define WER_MAX_ARRAY_ELEMENTS_COUNT 10
19#define WER_MAX_NESTING_LEVEL 4
20#define WER_SMALL_BUFFER_SIZE 1024
21#define WER_LARGE_BUFFER_SIZE WER_SMALL_BUFFER_SIZE * 16
334 PEXCEPTION_POINTERS pExceptionInfo);
336 static void __cdecl
WheatyCrtHandler(
wchar_t const* expression,
wchar_t const* function,
wchar_t const* file,
unsigned int line, uintptr_t pReserved);
350 DWORD& section, DWORD_PTR& offset);
352 static void WriteStackDetails(PCONTEXT pContext,
bool bWriteVariables, HANDLE pThreadHandle);
364 static void DumpTypeIndex(DWORD64, DWORD, DWORD_PTR,
bool &,
char const*,
char const*,
bool,
bool);
371 static int __cdecl
Log(
const TCHAR * format, ...);
373 static bool StoreSymbol(DWORD type , DWORD_PTR offset);
390 typedef NTSTATUS(NTAPI*
pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation);
std::optional< T > Optional
Optional helper class to wrap optional values within.
char const *const rgBaseType[]
std::set< SymbolPair > SymbolPairs
WheatyExceptionReport g_WheatyExceptionReport
static LPCTSTR GetExceptionString(DWORD dwCode)
static FILE * m_hReportFile
static BOOL GetLogicalAddress(PVOID addr, PTSTR szModule, DWORD len, DWORD §ion, DWORD_PTR &offset)
static bool alreadyCrashed
static int __cdecl Log(const TCHAR *format,...)
static BOOL CALLBACK EnumerateSymbolsCallback(PSYMBOL_INFO, ULONG, PVOID)
static BOOL _GetProcessorName(TCHAR *sProcessorName, DWORD maxcount)
static bool FormatSymbolValue(PSYMBOL_INFO, EnumerateSymbolsCallbackContext *)
static void PrintSystemInfo()
static void PrintSymbolDetail()
static SymbolPairs symbols
static void FormatOutputValue(char *pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize, size_t countOverride=0)
static BOOL _GetWindowsVersionFromWMI(TCHAR *szVersion, DWORD cntMax)
static void ClearSymbols()
static void DumpTypeIndex(DWORD64, DWORD, DWORD_PTR, bool &, char const *, char const *, bool, bool)
static LPTOP_LEVEL_EXCEPTION_FILTER m_previousFilter
static _invalid_parameter_handler m_previousCrtHandler
static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase)
static HANDLE m_hDumpFile
static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address)
static std::mutex alreadyCrashedLock
static TCHAR m_szDumpFileName[MAX_PATH]
static pRtlGetVersion RtlGetVersion
static BOOL _GetWindowsVersion(TCHAR *szVersion, DWORD cntMax)
static void WriteStackDetails(PCONTEXT pContext, bool bWriteVariables, HANDLE pThreadHandle)
static void PushSymbolDetail()
NTSTATUS(NTAPI * pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation)
static void PopSymbolDetail()
static bool StoreSymbol(DWORD type, DWORD_PTR offset)
static Optional< DWORD_PTR > GetIntegerRegisterValue(PCONTEXT context, ULONG registerId)
static void GenerateExceptionReport(PEXCEPTION_POINTERS pExceptionInfo)
static void printTracesForAllThreads(bool)
static std::stack< SymbolDetail > symbolDetails
static LONG WINAPI WheatyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
static void __cdecl WheatyCrtHandler(wchar_t const *expression, wchar_t const *function, wchar_t const *file, unsigned int line, uintptr_t pReserved)
static TCHAR m_szLogFileName[MAX_PATH]
std::strong_ordering operator<=>(SymbolPair const &other) const =default
bool operator==(SymbolPair const &other) const =default
SymbolPair(DWORD type, DWORD_PTR offset)