mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-02-24 04:00:02 +01:00
86 lines
2.7 KiB
C++
86 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include <Windows.h>
|
|
#include <DbgHelp.h>
|
|
#include <string>
|
|
|
|
// Small inline functions that should stay in the header
|
|
static inline const char* exceptionDescription(const DWORD& code)
|
|
{
|
|
switch (code)
|
|
{
|
|
case EXCEPTION_ACCESS_VIOLATION:
|
|
return "EXCEPTION_ACCESS_VIOLATION";
|
|
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
|
|
return "EXCEPTION_ARRAY_BOUNDS_EXCEEDED";
|
|
case EXCEPTION_BREAKPOINT:
|
|
return "EXCEPTION_BREAKPOINT";
|
|
case EXCEPTION_DATATYPE_MISALIGNMENT:
|
|
return "EXCEPTION_DATATYPE_MISALIGNMENT";
|
|
case EXCEPTION_FLT_DENORMAL_OPERAND:
|
|
return "EXCEPTION_FLT_DENORMAL_OPERAND";
|
|
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
|
|
return "EXCEPTION_FLT_DIVIDE_BY_ZERO";
|
|
case EXCEPTION_FLT_INEXACT_RESULT:
|
|
return "EXCEPTION_FLT_INEXACT_RESULT";
|
|
case EXCEPTION_FLT_INVALID_OPERATION:
|
|
return "EXCEPTION_FLT_INVALID_OPERATION";
|
|
case EXCEPTION_FLT_OVERFLOW:
|
|
return "EXCEPTION_FLT_OVERFLOW";
|
|
case EXCEPTION_FLT_STACK_CHECK:
|
|
return "EXCEPTION_FLT_STACK_CHECK";
|
|
case EXCEPTION_FLT_UNDERFLOW:
|
|
return "EXCEPTION_FLT_UNDERFLOW";
|
|
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
|
return "EXCEPTION_ILLEGAL_INSTRUCTION";
|
|
case EXCEPTION_IN_PAGE_ERROR:
|
|
return "EXCEPTION_IN_PAGE_ERROR";
|
|
case EXCEPTION_INT_DIVIDE_BY_ZERO:
|
|
return "EXCEPTION_INT_DIVIDE_BY_ZERO";
|
|
case EXCEPTION_INT_OVERFLOW:
|
|
return "EXCEPTION_INT_OVERFLOW";
|
|
case EXCEPTION_INVALID_DISPOSITION:
|
|
return "EXCEPTION_INVALID_DISPOSITION";
|
|
case EXCEPTION_NONCONTINUABLE_EXCEPTION:
|
|
return "EXCEPTION_NONCONTINUABLE_EXCEPTION";
|
|
case EXCEPTION_PRIV_INSTRUCTION:
|
|
return "EXCEPTION_PRIV_INSTRUCTION";
|
|
case EXCEPTION_SINGLE_STEP:
|
|
return "EXCEPTION_SINGLE_STEP";
|
|
case EXCEPTION_STACK_OVERFLOW:
|
|
return "EXCEPTION_STACK_OVERFLOW";
|
|
default:
|
|
return "UNKNOWN EXCEPTION";
|
|
}
|
|
}
|
|
|
|
/* Returns the index of the last backslash in the file path */
|
|
inline int GetFilenameStart(wchar_t* path)
|
|
{
|
|
int pos = 0;
|
|
int found = 0;
|
|
if (path != NULL)
|
|
{
|
|
while (path[pos] != L'\0' && pos < MAX_PATH)
|
|
{
|
|
if (path[pos] == L'\\')
|
|
{
|
|
found = pos + 1;
|
|
}
|
|
++pos;
|
|
}
|
|
}
|
|
|
|
return found;
|
|
}
|
|
|
|
// Implementations in UnhandledExceptionHandler.cpp
|
|
std::wstring GetModuleName(HANDLE process, const STACKFRAME64& stack);
|
|
std::wstring GetName(HANDLE process, const STACKFRAME64& stack);
|
|
std::wstring GetLine(HANDLE process, const STACKFRAME64& stack);
|
|
void LogStackTrace();
|
|
LONG WINAPI UnhandledExceptionHandler(PEXCEPTION_POINTERS info);
|
|
void AbortHandler(int signal_number);
|
|
void InitSymbols();
|
|
void InitUnhandledExceptionHandler(void);
|