[*] fix stack-overflow reporting
This commit is contained in:
parent
b423ce14b1
commit
ce424388aa
@ -201,49 +201,80 @@ namespace Aurora::Debug
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
StackTrace backtrace;
|
|
||||||
ParseStack(ExceptionInfo->ContextRecord, backtrace);
|
|
||||||
|
|
||||||
#if defined(_AU_USE_EXTENDED_FWD_FACING_DEBUGGING)
|
|
||||||
bool isInternal = true;
|
|
||||||
#else
|
|
||||||
bool isInternal = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pThrowInfo)
|
|
||||||
{
|
{
|
||||||
ReportSEH(handle, exception, pThrowInfo, handleNoCppObject, backtrace, [&](const AuString &str)
|
static bool bRunOnce {};
|
||||||
|
struct ArrowEx : Grug::Arrow
|
||||||
{
|
{
|
||||||
// Pre-submit callback -> its showtime
|
AuFunction<void()> callback;
|
||||||
if ((isCritical || isInternal) && (minimal == 0))
|
};
|
||||||
|
ArrowEx empty;
|
||||||
|
|
||||||
|
empty.callback = [&]()
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if (gRuntimeConfig.debug.bPrintExceptionStackTracesOut)
|
if (AuExchange(bRunOnce, true))
|
||||||
{
|
{
|
||||||
AuLogWarn("NT Exception: 0x{:x}, {}", ExceptionInfo->ExceptionRecord->ExceptionCode, str);
|
Telemetry::Mayday();
|
||||||
AuLogWarn("{}", StringifyStackTrace(backtrace));
|
PlatformHandleFatal(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
StackTrace backtrace;
|
||||||
|
ParseStack(ExceptionInfo->ContextRecord, backtrace);
|
||||||
|
|
||||||
|
#if defined(AU_CFG_ID_INTERNAL) || defined(AU_CFG_ID_DEBUG)
|
||||||
|
const bool kShouldPrintErrors = true;
|
||||||
|
#else
|
||||||
|
const bool kShouldPrintErrors = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (pThrowInfo)
|
||||||
|
{
|
||||||
|
ReportSEH(handle, exception, pThrowInfo, handleNoCppObject, backtrace, [&](const AuString &str)
|
||||||
|
{
|
||||||
|
// Pre-submit callback -> its showtime
|
||||||
|
if ((isCritical || kShouldPrintErrors) && (minimal == 0))
|
||||||
|
{
|
||||||
|
if (gRuntimeConfig.debug.bPrintExceptionStackTracesOut)
|
||||||
|
{
|
||||||
|
AuLogWarn("NT Exception: 0x{:x}, {}", ExceptionInfo->ExceptionRecord->ExceptionCode, str);
|
||||||
|
AuLogWarn("{}", StringifyStackTrace(backtrace));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
catch (...)
|
||||||
}
|
{
|
||||||
|
|
||||||
try
|
}
|
||||||
{
|
|
||||||
Grug::Arrow empty;
|
|
||||||
Grug::HurlRaiseProblematicEvent(&empty);
|
|
||||||
|
|
||||||
if (isCritical)
|
try
|
||||||
|
{
|
||||||
|
if (isCritical)
|
||||||
|
{
|
||||||
|
Telemetry::Mayday();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isCritical || gRuntimeConfig.debug.bIsExceptionThrowFatal) // exception = literally anything
|
||||||
|
{
|
||||||
|
PlatformHandleFatal(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
empty.pCallback =[](Grug::Arrow *pBase) -> void
|
||||||
{
|
{
|
||||||
Telemetry::Mayday();
|
auto pEx = (ArrowEx *)pBase;
|
||||||
}
|
pEx->callback();
|
||||||
|
};
|
||||||
if (isCritical || gRuntimeConfig.debug.bIsExceptionThrowFatal) // exception = literally anything
|
|
||||||
{
|
|
||||||
PlatformHandleFatal(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
Grug::HurlArrow(&empty, empty.pCallback, {});
|
||||||
|
Grug::ArrowWait(&empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
gDebugLocked = 0;
|
gDebugLocked = 0;
|
||||||
@ -344,7 +375,14 @@ namespace Aurora::Debug
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__fastfail('fokd');
|
if (AuSwInfo::IsWindows8Point1OrGreater())
|
||||||
|
{
|
||||||
|
__fastfail('fokd');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExitProcess(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user