391 static LONG WINAPI WheatyUnhandledExceptionFilter(
392 PEXCEPTION_POINTERS pExceptionInfo);
394 LONG UnhandledExceptionFilterImpl(PEXCEPTION_POINTERS pExceptionInfo)
noexcept;
396 static void __cdecl WheatyCrtHandler(
wchar_t const* expression,
wchar_t const* function,
wchar_t const* file,
unsigned int line, uintptr_t pReserved);
398 void printTracesForAllThreads(
bool bWriteVariables);
401 void GenerateExceptionReport(PEXCEPTION_POINTERS pExceptionInfo);
402 void PrintSystemInfo();
403 BOOL _GetWindowsVersion(TCHAR* szVersion, DWORD cntMax);
404 static BOOL _GetWindowsVersionFromWMI(TCHAR* szVersion, DWORD cntMax)
noexcept;
405 static BOOL _GetProcessorName(TCHAR* sProcessorName, DWORD maxcount);
408 static LPCTSTR GetExceptionString(DWORD dwCode);
409 static BOOL GetLogicalAddress(PVOID addr, PTSTR szModule, DWORD len,
410 DWORD& section, DWORD_PTR& offset);
412 void WriteStackDetails(PCONTEXT pContext,
bool bWriteVariables, HANDLE pThreadHandle);
414 static BOOL GetSymbolFromAddress(HANDLE hProcess, DWORD64 Address, ULONG InlineContext, PDWORD64 Displacement, PSYMBOL_INFO Symbol);
415 static BOOL GetSymbolLineFromAddress(HANDLE hProcess, DWORD64 qwAddr, ULONG InlineContext, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line64);
424 static BOOL CALLBACK EnumerateSymbolsCallback(PSYMBOL_INFO, ULONG, PVOID);
428 void DumpTypeIndex(DWORD64, DWORD, DWORD_PTR,
bool &,
char const*,
char const*,
bool,
bool);
430 template <
typename T>
431 void FormatOutputValueNumeric(
char* buffer,
size_t bufferSize,
char const* format, LPCVOID address);
433 void FormatOutputValue(
char * pszCurrBuffer,
BasicType basicType, DWORD64 length, PVOID pAddress,
size_t bufferSize,
size_t countOverride = 0);
435 BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase)
const;
437 template <
typename T>
requires (std::is_scalar_v<T>)
438 Optional<T> DereferenceUnsafePointer(LPCVOID address);
440 int Log(
const TCHAR * format, ...);
442 bool StoreSymbol(DWORD type , DWORD_PTR offset);
449 static constexpr SIZE_T m_tempPathBufferChars = 0x8000;
459 typedef NTSTATUS(NTAPI* pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation);
463 void PopSymbolDetail();
464 void PrintSymbolDetail();
WheatyExceptionReport * report