From 7694b1dc04c253a8b1c14740a1ef20f13114cd34 Mon Sep 17 00:00:00 2001 From: Jehan Date: Mon, 6 Jan 2025 21:09:37 +0100 Subject: [PATCH] Issue #12640: run in-build GIMP binary through a debugger when gdb is available. It is not in fact a fix for #12640, only an improvement to our build script, wrapping our calls to GIMP executables and outputting a backtrace on a crash. This way, when people report issues during one of the relevant calls, we may be able to diagnose. It won't be useful for other types of failures (when the process doesn't crash, but e.g. the script is wrong or other non-fatal bugs in GIMP). --- meson.build | 3 ++- tools/debug-in-build-gimp.py | 8 ++++++++ tools/in-build-gimp.sh | 8 +++++++- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tools/debug-in-build-gimp.py diff --git a/meson.build b/meson.build index e1b7450805..6c155a9bf4 100644 --- a/meson.build +++ b/meson.build @@ -1951,7 +1951,8 @@ subdir('app-tools') # tool. gimp_run_env=environment() -gimp_run_env.set('GIMP_GLOBAL_BUILD_ROOT', meson.global_build_root()) +gimp_run_env.set('GIMP_GLOBAL_BUILD_ROOT', meson.global_build_root()) +gimp_run_env.set('GIMP_GLOBAL_SOURCE_ROOT', meson.global_source_root()) if meson.can_run_host_binaries() and have_gobject_introspection if enable_console_bin diff --git a/tools/debug-in-build-gimp.py b/tools/debug-in-build-gimp.py new file mode 100644 index 0000000000..7225a7c4e4 --- /dev/null +++ b/tools/debug-in-build-gimp.py @@ -0,0 +1,8 @@ +def my_signal_handler (event): + if (isinstance(event, gdb.SignalEvent)): + gdb.write("Eeeeeeeeeeeek: in-build GIMP crashed!\n") + gdb.execute('info threads') + gdb.execute("thread apply all backtrace full") + +gdb.events.stop.connect(my_signal_handler) +gdb.execute("run") diff --git a/tools/in-build-gimp.sh b/tools/in-build-gimp.sh index b1254e7e98..913fd19c80 100755 --- a/tools/in-build-gimp.sh +++ b/tools/in-build-gimp.sh @@ -24,7 +24,13 @@ if [ -n "$GIMP_TEMP_UPDATE_RPATH" ]; then unset IFS fi -cat /dev/stdin | $GIMP_SELF_IN_BUILD "$@" +if command -v gdb; then + echo RUNNING: cat /dev/stdin "|" gdb --batch -x "$GIMP_GLOBAL_SOURCE_ROOT/tools/debug-in-build-gimp.py" --args $GIMP_SELF_IN_BUILD "$@" + cat /dev/stdin | gdb --return-child-result --batch -x "$GIMP_GLOBAL_SOURCE_ROOT/tools/debug-in-build-gimp.py" --args $GIMP_SELF_IN_BUILD "$@" +else + echo RUNNING: cat /dev/stdin "|" $GIMP_SELF_IN_BUILD "$@" + cat /dev/stdin | $GIMP_SELF_IN_BUILD "$@" +fi if [ -n "$GIMP_TEMP_UPDATE_RPATH" ]; then export IFS=":"