diff --git a/loader/src/platform/windows/crashlog.cpp b/loader/src/platform/windows/crashlog.cpp index 7f10bb47..b1d10046 100644 --- a/loader/src/platform/windows/crashlog.cpp +++ b/loader/src/platform/windows/crashlog.cpp @@ -344,9 +344,19 @@ static std::string getInfo(LPEXCEPTION_POINTERS info, Mod* faultyMod) { } static LONG WINAPI exceptionHandler(LPEXCEPTION_POINTERS info) { - // not all exceptions are critical, some (i.e. SetThreadName) can and should be ignored - if (info->ExceptionRecord->ExceptionCode == 0x406d1388) { - return EXCEPTION_CONTINUE_EXECUTION; + // not all exceptions are critical, some can and should be ignored + bool ignore = false; + + switch (info->ExceptionRecord->ExceptionCode) { + case DBG_CONTROL_C: ignore = true; break; + case DBG_TERMINATE_THREAD: ignore = true; break; + case DBG_TERMINATE_PROCESS: ignore = true; break; + case STATUS_CONTROL_C_EXIT: ignore = true; break; + case 0x406d1388: ignore = true; break; // SetThreadName + } + + if (ignore) { + return EXCEPTION_CONTINUE_SEARCH; } SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS | SYMOPT_LOAD_LINES);