Add ability to disable blue screens
This will let us produce crash dumps on user machines.
This commit is contained in:
parent
2bcf32e2cf
commit
1da7438e39
@ -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)
|
||||||
//Get ready to catch any dodgy errors
|
bool enableBluescreen = true;
|
||||||
signal(SIGSEGV, SigHandler);
|
if(arguments["nobluescreen"] == "true")
|
||||||
signal(SIGFPE, SigHandler);
|
{
|
||||||
signal(SIGILL, SigHandler);
|
enableBluescreen = false;
|
||||||
signal(SIGABRT, SigHandler);
|
}
|
||||||
|
if (enableBluescreen)
|
||||||
|
{
|
||||||
|
//Get ready to catch any dodgy errors
|
||||||
|
signal(SIGSEGV, SigHandler);
|
||||||
|
signal(SIGFPE, SigHandler);
|
||||||
|
signal(SIGILL, 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)
|
||||||
catch(std::exception& e)
|
|
||||||
{
|
{
|
||||||
BlueScreen(ByteString(e.what()).FromUtf8());
|
try
|
||||||
|
{
|
||||||
|
wrapWithBluescreen();
|
||||||
|
}
|
||||||
|
catch (const std::exception &e)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
Reference in New Issue
Block a user