Add ability to disable blue screens

This will let us produce crash dumps on user machines.
This commit is contained in:
Tamás Bálint Misius 2022-12-30 08:21:02 +01:00
parent 2bcf32e2cf
commit 1da7438e39
No known key found for this signature in database
GPG Key ID: 5B472A12F6ECA9F2

View File

@ -309,6 +309,7 @@ std::map<ByteString, ByteString> readArguments(int argc, char * argv[])
arguments["sound"] = "false"; arguments["sound"] = "false";
arguments["kiosk"] = "false"; arguments["kiosk"] = "false";
arguments["redirect"] = "false"; arguments["redirect"] = "false";
arguments["nobluescreen"] = "false";
arguments["scripts"] = "false"; arguments["scripts"] = "false";
arguments["open"] = ""; arguments["open"] = "";
arguments["ddir"] = ""; arguments["ddir"] = "";
@ -353,6 +354,10 @@ std::map<ByteString, ByteString> readArguments(int argc, char * argv[])
{ {
arguments["redirect"] = "true"; arguments["redirect"] = "true";
} }
else if (!strncmp(argv[i], "nobluescreen", 12))
{
arguments["nobluescreen"] = "true";
}
else if (!strncmp(argv[i], "sound", 5)) else if (!strncmp(argv[i], "sound", 5))
{ {
arguments["sound"] = "true"; arguments["sound"] = "true";
@ -866,11 +871,19 @@ int main(int argc, char * argv[])
engine->SetFastQuit(Client::Ref().GetPrefBool("FastQuit", true)); engine->SetFastQuit(Client::Ref().GetPrefBool("FastQuit", true));
#if !defined(DEBUG) #if !defined(DEBUG)
bool enableBluescreen = true;
if(arguments["nobluescreen"] == "true")
{
enableBluescreen = false;
}
if (enableBluescreen)
{
//Get ready to catch any dodgy errors //Get ready to catch any dodgy errors
signal(SIGSEGV, SigHandler); signal(SIGSEGV, SigHandler);
signal(SIGFPE, SigHandler); signal(SIGFPE, SigHandler);
signal(SIGILL, SigHandler); signal(SIGILL, SigHandler);
signal(SIGABRT, SigHandler); signal(SIGABRT, SigHandler);
}
#endif #endif
#ifdef X86_SSE #ifdef X86_SSE
@ -881,10 +894,8 @@ int main(int argc, char * argv[])
#endif #endif
GameController * gameController = NULL; GameController * gameController = NULL;
#if !defined(DEBUG)
try {
#endif
auto wrapWithBluescreen = [&]() {
gameController = new GameController(); gameController = new GameController();
engine->ShowWindow(gameController->GetView()); engine->ShowWindow(gameController->GetView());
@ -970,14 +981,23 @@ int main(int argc, char * argv[])
EngineProcess(); EngineProcess();
SaveWindowPosition(); SaveWindowPosition();
};
#if !defined(DEBUG) #if !defined(DEBUG)
if (enableBluescreen)
{
try
{
wrapWithBluescreen();
} }
catch(std::exception& e) catch (const std::exception &e)
{ {
BlueScreen(ByteString(e.what()).FromUtf8()); BlueScreen(ByteString(e.what()).FromUtf8());
} }
}
else
#endif #endif
wrapWithBluescreen(); // the else branch of the if in the #if !defined(DEBUG)
ui::Engine::Ref().CloseWindow(); ui::Engine::Ref().CloseWindow();
delete gameController; delete gameController;