You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Merge pull request #106139 from akien-mga/crash-handler-backtrace-print
Improve script backtrace print in crash handlers
This commit is contained in:
@@ -67,9 +67,8 @@ static void handle_crash(int sig) {
|
|||||||
String _execpath = OS::get_singleton()->get_executable_path();
|
String _execpath = OS::get_singleton()->get_executable_path();
|
||||||
|
|
||||||
String msg;
|
String msg;
|
||||||
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
|
if (ProjectSettings::get_singleton()) {
|
||||||
if (proj_settings) {
|
msg = GLOBAL_GET("debug/settings/crash_handler/message");
|
||||||
msg = proj_settings->get("debug/settings/crash_handler/message");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
||||||
@@ -144,21 +143,18 @@ static void handle_crash(int sig) {
|
|||||||
|
|
||||||
free(strings);
|
free(strings);
|
||||||
}
|
}
|
||||||
print_error("-- END OF BACKTRACE --");
|
print_error("-- END OF C++ BACKTRACE --");
|
||||||
print_error("================================================================");
|
print_error("================================================================");
|
||||||
|
|
||||||
Vector<Ref<ScriptBacktrace>> script_backtraces;
|
|
||||||
if (ScriptServer::are_languages_initialized()) {
|
if (ScriptServer::are_languages_initialized()) {
|
||||||
script_backtraces = ScriptServer::capture_script_backtraces(false);
|
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
|
||||||
}
|
|
||||||
if (!script_backtraces.is_empty()) {
|
|
||||||
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
||||||
if (!backtrace->is_empty()) {
|
if (!backtrace->is_empty()) {
|
||||||
print_error(backtrace->format());
|
print_error(backtrace->format());
|
||||||
|
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
|
||||||
|
print_error("================================================================");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print_error("-- END OF SCRIPT BACKTRACE --");
|
|
||||||
print_error("================================================================");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Abort to pass the error to the OS
|
// Abort to pass the error to the OS
|
||||||
|
|||||||
@@ -90,9 +90,8 @@ static void handle_crash(int sig) {
|
|||||||
String _execpath = OS::get_singleton()->get_executable_path();
|
String _execpath = OS::get_singleton()->get_executable_path();
|
||||||
|
|
||||||
String msg;
|
String msg;
|
||||||
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
|
if (ProjectSettings::get_singleton()) {
|
||||||
if (proj_settings) {
|
msg = GLOBAL_GET("debug/settings/crash_handler/message");
|
||||||
msg = proj_settings->get("debug/settings/crash_handler/message");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
||||||
@@ -174,21 +173,18 @@ static void handle_crash(int sig) {
|
|||||||
|
|
||||||
free(strings);
|
free(strings);
|
||||||
}
|
}
|
||||||
print_error("-- END OF BACKTRACE --");
|
print_error("-- END OF C++ BACKTRACE --");
|
||||||
print_error("================================================================");
|
print_error("================================================================");
|
||||||
|
|
||||||
Vector<Ref<ScriptBacktrace>> script_backtraces;
|
|
||||||
if (ScriptServer::are_languages_initialized()) {
|
if (ScriptServer::are_languages_initialized()) {
|
||||||
script_backtraces = ScriptServer::capture_script_backtraces(false);
|
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
|
||||||
}
|
|
||||||
if (!script_backtraces.is_empty()) {
|
|
||||||
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
||||||
if (!backtrace->is_empty()) {
|
if (!backtrace->is_empty()) {
|
||||||
print_error(backtrace->format());
|
print_error(backtrace->format());
|
||||||
|
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
|
||||||
|
print_error("================================================================");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print_error("-- END OF SCRIPT BACKTRACE --");
|
|
||||||
print_error("================================================================");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Abort to pass the error to the OS
|
// Abort to pass the error to the OS
|
||||||
|
|||||||
@@ -134,9 +134,8 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String msg;
|
String msg;
|
||||||
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
|
if (ProjectSettings::get_singleton()) {
|
||||||
if (proj_settings) {
|
msg = GLOBAL_GET("debug/settings/crash_handler/message");
|
||||||
msg = proj_settings->get("debug/settings/crash_handler/message");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
||||||
@@ -226,23 +225,20 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
|
|||||||
}
|
}
|
||||||
} while (frame.AddrReturn.Offset != 0 && n < 256);
|
} while (frame.AddrReturn.Offset != 0 && n < 256);
|
||||||
|
|
||||||
print_error("-- END OF BACKTRACE --");
|
print_error("-- END OF C++ BACKTRACE --");
|
||||||
print_error("================================================================");
|
print_error("================================================================");
|
||||||
|
|
||||||
SymCleanup(process);
|
SymCleanup(process);
|
||||||
|
|
||||||
Vector<Ref<ScriptBacktrace>> script_backtraces;
|
|
||||||
if (ScriptServer::are_languages_initialized()) {
|
if (ScriptServer::are_languages_initialized()) {
|
||||||
script_backtraces = ScriptServer::capture_script_backtraces(false);
|
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
|
||||||
}
|
|
||||||
if (!script_backtraces.is_empty()) {
|
|
||||||
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
||||||
if (!backtrace->is_empty()) {
|
if (!backtrace->is_empty()) {
|
||||||
print_error(backtrace->format());
|
print_error(backtrace->format());
|
||||||
|
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
|
||||||
|
print_error("================================================================");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print_error("-- END OF SCRIPT BACKTRACE --");
|
|
||||||
print_error("================================================================");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass the exception to the OS
|
// Pass the exception to the OS
|
||||||
|
|||||||
@@ -140,9 +140,8 @@ extern void CrashHandlerException(int signal) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String msg;
|
String msg;
|
||||||
const ProjectSettings *proj_settings = ProjectSettings::get_singleton();
|
if (ProjectSettings::get_singleton()) {
|
||||||
if (proj_settings) {
|
msg = GLOBAL_GET("debug/settings/crash_handler/message");
|
||||||
msg = proj_settings->get("debug/settings/crash_handler/message");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
// Tell MainLoop about the crash. This can be handled by users too in Node.
|
||||||
@@ -182,21 +181,18 @@ extern void CrashHandlerException(int signal) {
|
|||||||
backtrace_simple(data.state, 1, &trace_callback, &error_callback, reinterpret_cast<void *>(&data));
|
backtrace_simple(data.state, 1, &trace_callback, &error_callback, reinterpret_cast<void *>(&data));
|
||||||
}
|
}
|
||||||
|
|
||||||
print_error("-- END OF BACKTRACE --");
|
print_error("-- END OF C++ BACKTRACE --");
|
||||||
print_error("================================================================");
|
print_error("================================================================");
|
||||||
|
|
||||||
Vector<Ref<ScriptBacktrace>> script_backtraces;
|
|
||||||
if (ScriptServer::are_languages_initialized()) {
|
if (ScriptServer::are_languages_initialized()) {
|
||||||
script_backtraces = ScriptServer::capture_script_backtraces(false);
|
Vector<Ref<ScriptBacktrace>> script_backtraces = ScriptServer::capture_script_backtraces(false);
|
||||||
}
|
|
||||||
if (!script_backtraces.is_empty()) {
|
|
||||||
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
for (const Ref<ScriptBacktrace> &backtrace : script_backtraces) {
|
||||||
if (!backtrace->is_empty()) {
|
if (!backtrace->is_empty()) {
|
||||||
print_error(backtrace->format());
|
print_error(backtrace->format());
|
||||||
|
print_error(vformat("-- END OF %s BACKTRACE --", backtrace->get_language_name().to_upper()));
|
||||||
|
print_error("================================================================");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print_error("-- END OF SCRIPT BACKTRACE --");
|
|
||||||
print_error("================================================================");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user