mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-12 10:37:59 -05:00
yuzu: Use a debugger to generate minidumps
yuzu: Move mini_dump out of core startup_checks: Better exception handling
This commit is contained in:
@ -31,19 +31,36 @@ void CheckVulkan() {
|
||||
}
|
||||
}
|
||||
|
||||
bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
|
||||
bool CheckEnvVars(bool* is_child) {
|
||||
#ifdef _WIN32
|
||||
// Check environment variable to see if we are the child
|
||||
char variable_contents[8];
|
||||
const DWORD startup_check_var =
|
||||
GetEnvironmentVariableA(STARTUP_CHECK_ENV_VAR, variable_contents, 8);
|
||||
if (startup_check_var > 0 && std::strncmp(variable_contents, "ON", 8) == 0) {
|
||||
if (startup_check_var > 0 && std::strncmp(variable_contents, ENV_VAR_ENABLED_TEXT, 8) == 0) {
|
||||
CheckVulkan();
|
||||
return true;
|
||||
}
|
||||
|
||||
// Don't perform startup checks if we are a child process
|
||||
char is_child_s[8];
|
||||
const DWORD is_child_len = GetEnvironmentVariableA(IS_CHILD_ENV_VAR, is_child_s, 8);
|
||||
if (is_child_len > 0 && std::strncmp(is_child_s, ENV_VAR_ENABLED_TEXT, 8) == 0) {
|
||||
*is_child = true;
|
||||
return false;
|
||||
} else if (!SetEnvironmentVariableA(IS_CHILD_ENV_VAR, ENV_VAR_ENABLED_TEXT)) {
|
||||
std::fprintf(stderr, "SetEnvironmentVariableA failed to set %s with error %d\n",
|
||||
IS_CHILD_ENV_VAR, GetLastError());
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
|
||||
#ifdef _WIN32
|
||||
// Set the startup variable for child processes
|
||||
const bool env_var_set = SetEnvironmentVariableA(STARTUP_CHECK_ENV_VAR, "ON");
|
||||
const bool env_var_set = SetEnvironmentVariableA(STARTUP_CHECK_ENV_VAR, ENV_VAR_ENABLED_TEXT);
|
||||
if (!env_var_set) {
|
||||
std::fprintf(stderr, "SetEnvironmentVariableA failed to set %s with error %d\n",
|
||||
STARTUP_CHECK_ENV_VAR, GetLastError());
|
||||
@ -53,7 +70,7 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
|
||||
PROCESS_INFORMATION process_info;
|
||||
std::memset(&process_info, '\0', sizeof(process_info));
|
||||
|
||||
if (!SpawnChild(arg0, &process_info)) {
|
||||
if (!SpawnChild(arg0, &process_info, 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -106,7 +123,7 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi) {
|
||||
bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi, int flags) {
|
||||
STARTUPINFOA startup_info;
|
||||
|
||||
std::memset(&startup_info, '\0', sizeof(startup_info));
|
||||
@ -120,7 +137,7 @@ bool SpawnChild(const char* arg0, PROCESS_INFORMATION* pi) {
|
||||
nullptr, // lpProcessAttributes
|
||||
nullptr, // lpThreadAttributes
|
||||
false, // bInheritHandles
|
||||
0, // dwCreationFlags
|
||||
flags, // dwCreationFlags
|
||||
nullptr, // lpEnvironment
|
||||
nullptr, // lpCurrentDirectory
|
||||
&startup_info, // lpStartupInfo
|
||||
|
Reference in New Issue
Block a user