From 51eb5b26cd74ed3b03e71085e128869fe8c5e1c7 Mon Sep 17 00:00:00 2001 From: William Brown Date: Apr 08 2019 01:07:08 +0000 Subject: Ticket 50317 - fix ds-backtrace issue on latest gdb Bug Description: ds-backtrace was failing due to a type issue on latest python/gdb on suse. Fix Description: If debug info is missing, a nonetype was returned in the backtrace, causing a type mismatch on " ".join(). https://pagure.io/389-ds-base/pull-request/50317 Author: William Brown Review by: ??? --- diff --git a/ldap/admin/src/scripts/ns-slapd-gdb.py b/ldap/admin/src/scripts/ns-slapd-gdb.py index 3273d43..4e463b5 100644 --- a/ldap/admin/src/scripts/ns-slapd-gdb.py +++ b/ldap/admin/src/scripts/ns-slapd-gdb.py @@ -49,7 +49,9 @@ class DSBacktrace(gdb.Command): backtrace.append(cur_frame.name()) cur_frame = cur_frame.older() # Dicts can't use lists as keys, so we need to squash this to a string. - s_backtrace = ' '.join(backtrace) + + formatted = ['???' if x is None else str(x) for x in backtrace] + s_backtrace = ' '.join(formatted) # Have we seen this trace before? if s_backtrace not in self._stack_maps: # Make it! @@ -72,7 +74,6 @@ class DSBacktrace(gdb.Command): thread.switch() self._parse_thread_state(lwpid, gtid) - # print (self._stack_maps) for m in self._stack_maps: # Take a copy of the bt o = self._stack_maps[m][0]['bt'] @@ -91,6 +92,8 @@ class DSIdleFilterDecorator(FrameDecorator): def function(self): frame = self.inferior_frame() name = str(frame.name()) + if frame.name() is None: + name = '???' if name == 'connection_wait_for_new_work' or name == 'work_q_wait': name = "[IDLE THREAD] " + name