mirror of
https://github.com/thunderbrewhq/squall.git
synced 2025-12-12 02:22:30 +00:00
feat(error): add exception-to-string translation for windows
This commit is contained in:
parent
bebe40f781
commit
d7fc37cef1
3 changed files with 104 additions and 2 deletions
|
|
@ -8,12 +8,14 @@ file(GLOB STORM_SOURCES
|
||||||
"queue/*.cpp"
|
"queue/*.cpp"
|
||||||
"string/*.cpp"
|
"string/*.cpp"
|
||||||
"thread/*.cpp"
|
"thread/*.cpp"
|
||||||
|
"error/*.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WHOA_SYSTEM_WIN)
|
if(WHOA_SYSTEM_WIN)
|
||||||
file(GLOB STORM_WIN_SOURCES
|
file(GLOB STORM_WIN_SOURCES
|
||||||
"win/*.cpp"
|
"win/*.cpp"
|
||||||
"thread/win/*.cpp"
|
"thread/win/*.cpp"
|
||||||
|
"error/win/*.cpp"
|
||||||
)
|
)
|
||||||
list(APPEND STORM_SOURCES ${STORM_WIN_SOURCES})
|
list(APPEND STORM_SOURCES ${STORM_WIN_SOURCES})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -77,9 +77,8 @@ void SErrPrepareAppFatal(const char* filename, int32_t linenumber) {
|
||||||
|
|
||||||
void SErrSetLastError(uint32_t errorcode) {
|
void SErrSetLastError(uint32_t errorcode) {
|
||||||
s_lasterror = errorcode;
|
s_lasterror = errorcode;
|
||||||
|
|
||||||
#if defined(WHOA_SYSTEM_WIN)
|
#if defined(WHOA_SYSTEM_WIN)
|
||||||
SetLastError(errorcode);
|
SetLastError(errorcode);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
101
storm/error/win/Error.cpp
Normal file
101
storm/error/win/Error.cpp
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
#include "storm/Error.hpp"
|
||||||
|
#include "storm/String.hpp"
|
||||||
|
#include <cstdarg>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
void GetExceptionNameWin32(DWORD dwMessageId, char* lpBuffer, DWORD nSize) {
|
||||||
|
switch (dwMessageId) {
|
||||||
|
case EXCEPTION_GUARD_PAGE:
|
||||||
|
SStrCopy(lpBuffer, "GUARD_PAGE", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_DATATYPE_MISALIGNMENT:
|
||||||
|
SStrCopy(lpBuffer, "DATATYPE_MISALIGNMENT", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_BREAKPOINT:
|
||||||
|
SStrCopy(lpBuffer, "BREAKPOINT", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_SINGLE_STEP:
|
||||||
|
SStrCopy(lpBuffer, "SINGLE_STEP", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_ACCESS_VIOLATION:
|
||||||
|
SStrCopy(lpBuffer, "ACCESS_VIOLATION", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_IN_PAGE_ERROR:
|
||||||
|
SStrCopy(lpBuffer, "IN_PAGE_ERROR", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_INVALID_HANDLE:
|
||||||
|
SStrCopy(lpBuffer, "INVALID_HANDLE", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||||
|
SStrCopy(lpBuffer, "ILLEGAL_INSTRUCTION", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_NONCONTINUABLE_EXCEPTION:
|
||||||
|
SStrCopy(lpBuffer, "NONCONTINUABLE_EXCEPTION", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_INVALID_DISPOSITION:
|
||||||
|
SStrCopy(lpBuffer, "INVALID_DISPOSITION", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
|
||||||
|
SStrCopy(lpBuffer, "ARRAY_BOUNDS_EXCEEDED", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_FLT_DENORMAL_OPERAND:
|
||||||
|
SStrCopy(lpBuffer, "FLT_DENORMAL_OPERAND", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
|
||||||
|
SStrCopy(lpBuffer, "FLT_DIVIDE_BY_ZERO", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_FLT_INEXACT_RESULT:
|
||||||
|
SStrCopy(lpBuffer, "FLT_INEXACT_RESULT", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_FLT_OVERFLOW:
|
||||||
|
SStrCopy(lpBuffer, "FLT_OVERFLOW", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_FLT_STACK_CHECK:
|
||||||
|
SStrCopy(lpBuffer, "FLT_STACK_CHECK", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_FLT_UNDERFLOW:
|
||||||
|
SStrCopy(lpBuffer, "FLT_UNDERFLOW", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_INT_DIVIDE_BY_ZERO:
|
||||||
|
SStrCopy(lpBuffer, "INT_DIVIDE_BY_ZERO", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_INT_OVERFLOW:
|
||||||
|
SStrCopy(lpBuffer, "INT_OVERFLOW", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_PRIV_INSTRUCTION:
|
||||||
|
SStrCopy(lpBuffer, "PRIV_INSTRUCTION", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_STACK_OVERFLOW:
|
||||||
|
SStrCopy(lpBuffer, "STACK_OVERFLOW", nSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
HMODULE lpSource = GetModuleHandle("ntdll.dll");
|
||||||
|
if (!lpSource || !FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, lpSource, dwMessageId, 0, lpBuffer, nSize, nullptr)) {
|
||||||
|
SStrCopy(lpBuffer, "unknown exception", nSize);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue