mirror of https://github.com/godotengine/godot
Improve crash handler message display
- State the Godot version and full hash in the backtrace.
- Add decoration around the crash backtrace, both to make it stand out
from other messages and help the user figure out what they should copy.
(cherry picked from commit 8556dd1bef)
This commit is contained in:
parent
e2b71de38b
commit
4d94aba0ed
|
|
@ -32,6 +32,8 @@
|
|||
|
||||
#include "core/os/os.h"
|
||||
#include "core/project_settings.h"
|
||||
#include "core/version.h"
|
||||
#include "core/version_hash.gen.h"
|
||||
#include "main/main.h"
|
||||
|
||||
#include <string.h>
|
||||
|
|
@ -85,11 +87,18 @@ static void handle_crash(int sig) {
|
|||
}
|
||||
|
||||
// Dump the backtrace to stderr with a message to the user
|
||||
fprintf(stderr, "\n================================================================\n");
|
||||
fprintf(stderr, "%s: Program crashed with signal %d\n", __FUNCTION__, sig);
|
||||
|
||||
if (OS::get_singleton()->get_main_loop())
|
||||
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_CRASH);
|
||||
|
||||
// Print the engine version just before, so that people are reminded to include the version in backtrace reports.
|
||||
if (String(VERSION_HASH).length() != 0) {
|
||||
fprintf(stderr, "Engine version: " VERSION_FULL_NAME " (" VERSION_HASH ")\n");
|
||||
} else {
|
||||
fprintf(stderr, "Engine version: " VERSION_FULL_NAME "\n");
|
||||
}
|
||||
fprintf(stderr, "Dumping the backtrace. %ls\n", msg.c_str());
|
||||
char **strings = backtrace_symbols(bt_buffer, size);
|
||||
if (strings) {
|
||||
|
|
@ -148,6 +157,7 @@ static void handle_crash(int sig) {
|
|||
free(strings);
|
||||
}
|
||||
fprintf(stderr, "-- END OF BACKTRACE --\n");
|
||||
fprintf(stderr, "================================================================\n");
|
||||
|
||||
// Abort to pass the error to the OS
|
||||
abort();
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@
|
|||
|
||||
#include "core/os/os.h"
|
||||
#include "core/project_settings.h"
|
||||
#include "core/version.h"
|
||||
#include "core/version_hash.gen.h"
|
||||
#include "main/main.h"
|
||||
|
||||
#ifdef CRASH_HANDLER_EXCEPTION
|
||||
|
|
@ -127,6 +129,7 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
|
|||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
|
||||
fprintf(stderr, "\n================================================================\n");
|
||||
fprintf(stderr, "%s: Program crashed\n", __FUNCTION__);
|
||||
|
||||
if (OS::get_singleton()->get_main_loop())
|
||||
|
|
@ -175,6 +178,12 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
|
|||
msg = proj_settings->get("debug/settings/crash_handler/message");
|
||||
}
|
||||
|
||||
// Print the engine version just before, so that people are reminded to include the version in backtrace reports.
|
||||
if (String(VERSION_HASH).length() != 0) {
|
||||
fprintf(stderr, "Engine version: " VERSION_FULL_NAME " (" VERSION_HASH ")\n");
|
||||
} else {
|
||||
fprintf(stderr, "Engine version: " VERSION_FULL_NAME "\n");
|
||||
}
|
||||
fprintf(stderr, "Dumping the backtrace. %ls\n", msg.c_str());
|
||||
|
||||
int n = 0;
|
||||
|
|
@ -200,6 +209,7 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
|
|||
} while (frame.AddrReturn.Offset != 0 && n < 256);
|
||||
|
||||
fprintf(stderr, "-- END OF BACKTRACE --\n");
|
||||
fprintf(stderr, "================================================================\n");
|
||||
|
||||
SymCleanup(process);
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@
|
|||
|
||||
#include "core/os/os.h"
|
||||
#include "core/project_settings.h"
|
||||
#include "core/version.h"
|
||||
#include "core/version_hash.gen.h"
|
||||
#include "main/main.h"
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
|
|
@ -61,12 +63,19 @@ static void handle_crash(int sig) {
|
|||
}
|
||||
|
||||
// Dump the backtrace to stderr with a message to the user
|
||||
fprintf(stderr, "\n================================================================\n");
|
||||
fprintf(stderr, "%s: Program crashed with signal %d\n", __FUNCTION__, sig);
|
||||
|
||||
if (OS::get_singleton()->get_main_loop()) {
|
||||
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_CRASH);
|
||||
}
|
||||
|
||||
// Print the engine version just before, so that people are reminded to include the version in backtrace reports.
|
||||
if (String(VERSION_HASH).length() != 0) {
|
||||
fprintf(stderr, "Engine version: " VERSION_FULL_NAME " (" VERSION_HASH ")\n");
|
||||
} else {
|
||||
fprintf(stderr, "Engine version: " VERSION_FULL_NAME "\n");
|
||||
}
|
||||
fprintf(stderr, "Dumping the backtrace. %ls\n", msg.c_str());
|
||||
char **strings = backtrace_symbols(bt_buffer, size);
|
||||
if (strings) {
|
||||
|
|
@ -115,6 +124,7 @@ static void handle_crash(int sig) {
|
|||
free(strings);
|
||||
}
|
||||
fprintf(stderr, "-- END OF BACKTRACE --\n");
|
||||
fprintf(stderr, "================================================================\n");
|
||||
|
||||
// Abort to pass the error to the OS
|
||||
abort();
|
||||
|
|
|
|||
Loading…
Reference in New Issue