334 static LONG WINAPI WheatyUnhandledExceptionFilter(
335 PEXCEPTION_POINTERS pExceptionInfo);
337 static void __cdecl WheatyCrtHandler(
wchar_t const* expression,
wchar_t const* function,
wchar_t const* file,
unsigned int line, uintptr_t pReserved);
339 static void printTracesForAllThreads(
bool);
342 static void GenerateExceptionReport(PEXCEPTION_POINTERS pExceptionInfo);
343 static void PrintSystemInfo();
344 static BOOL _GetWindowsVersion(TCHAR* szVersion, DWORD cntMax);
345 static BOOL _GetWindowsVersionFromWMI(TCHAR* szVersion, DWORD cntMax);
346 static BOOL _GetProcessorName(TCHAR* sProcessorName, DWORD maxcount);
349 static LPCTSTR GetExceptionString(DWORD dwCode);
350 static BOOL GetLogicalAddress(PVOID addr, PTSTR szModule, DWORD len,
351 DWORD& section, DWORD_PTR& offset);
353 static void WriteStackDetails(PCONTEXT pContext,
bool bWriteVariables, HANDLE pThreadHandle);
361 static BOOL CALLBACK EnumerateSymbolsCallback(PSYMBOL_INFO, ULONG, PVOID);
365 static void DumpTypeIndex(DWORD64, DWORD, DWORD_PTR,
bool &,
char const*,
char const*,
bool,
bool);
367 static void FormatOutputValue(
char * pszCurrBuffer,
BasicType basicType, DWORD64 length, PVOID pAddress,
size_t bufferSize,
size_t countOverride = 0);
369 static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase);
370 static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address);
372 static int __cdecl
Log(
const TCHAR * format, ...);
374 static bool StoreSymbol(DWORD type , DWORD_PTR offset);
375 static void ClearSymbols();
380 static TCHAR m_szLogFileName[MAX_PATH];
381 static TCHAR m_szDumpFileName[MAX_PATH];
391 typedef NTSTATUS(NTAPI* pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation);
394 static void PushSymbolDetail();
395 static void PopSymbolDetail();
396 static void PrintSymbolDetail();