[gimp] libgimpbase: allow NULL prog_name in gimp_print_stack_trace().



commit 4e293a8696c3c5fa6fa2bdba39979f91d4c2e91b
Author: Jehan <jehan girinstud io>
Date:   Mon Feb 12 01:50:19 2018 +0100

    libgimpbase: allow NULL prog_name in gimp_print_stack_trace().
    
    The only debugger command which uses this value currently is gdb. And
    even there, it doesn't look mandatory. The alternative call using "-p"
    option does not require the program name. The manual doesn't say if
    calling with the program name has any advantage (but I don't see why it
    would, the PID is enough to find a process). Just in case, I leave the
    prog_name parameter (because it's easier to make a parameter useless
    than changing a libgimp* API) but simply allows setting it to NULL.

 libgimpbase/gimputils.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/libgimpbase/gimputils.c b/libgimpbase/gimputils.c
index ba2ddcb..1f2356f 100644
--- a/libgimpbase/gimputils.c
+++ b/libgimpbase/gimputils.c
@@ -1084,10 +1084,10 @@ gimp_flags_value_get_abbrev (GFlagsClass *flags_class,
  * @trace: location to store a newly allocated string of the trace.
  *
  * Attempts to generate a stack trace at current code position in
- * @prog_name. @prog_name is mostly a helper, but it has to be the
- * program name of the current program. This function is not meant to
- * generate stack trace for third-party programs, and will attach the
- * current process id only.
+ * @prog_name. @prog_name is mostly a helper and can be set to NULL.
+ * Nevertheless if set, it has to be the current program name (argv[0]).
+ * This function is not meant to generate stack trace for third-party
+ * programs, and will attach the current process id only.
  * Internally, this function uses `gdb` or `lldb` if they are available,
  * or the stacktrace() API on platforms where it is available. It always
  * fails on Win32.
@@ -1135,6 +1135,9 @@ gimp_print_stack_trace (const gchar *prog_name,
       gchar *args[7] = { "gdb", "-batch", "-ex", "backtrace full",
                          (gchar *) prog_name, NULL, NULL };
 
+      if (prog_name == NULL)
+        args[4] = "-p";
+
       args[5] = gimp_pid;
 
       /* Redirect the debugger output. */
@@ -1255,11 +1258,12 @@ gimp_print_stack_trace (const gchar *prog_name,
 }
 
 /**
- * gimp_print_stack_trace:
+ * gimp_on_error_query:
  * @prog_name: the program to attach to.
  *
  * This is mostly the same as g_on_error_query() except that we use our
  * own backtrace function, much more complete.
+ * @prog_name must be the current program name (argv[0]).
  * It does nothing on Win32.
  *
  * Since: 2.10


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]