churchyard / rpms / python3

Forked from rpms/python3 6 years ago
Clone

Blame 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch

88d5ef1
--- a/Tools/gdb/libpython.py	2013-04-06 03:41:58.000000000 -0400
88d5ef1
+++ b/Tools/gdb/libpython.py	2013-04-24 03:51:04.720540343 -0400
88d5ef1
@@ -274,6 +274,9 @@
88d5ef1
                 self.tp_name = tp_name
88d5ef1
                 self.address = address
88d5ef1
 
88d5ef1
+            def __len__(self):
88d5ef1
+                return len(repr(self))
88d5ef1
+
88d5ef1
             def __repr__(self):
88d5ef1
                 # For the NULL pointer, we have no way of knowing a type, so
88d5ef1
                 # special-case it as per
88d5ef1
@@ -881,6 +884,8 @@
88d5ef1
         filename = self.filename()
88d5ef1
         try:
88d5ef1
             f = open(os_fsencode(filename), 'r')
88d5ef1
+        except TypeError: # filename is FakeRepr
88d5ef1
+            return None
88d5ef1
         except IOError:
88d5ef1
             return None
88d5ef1
         with f:
88d5ef1
@@ -1523,9 +1528,12 @@
88d5ef1
 
88d5ef1
     def print_summary(self):
88d5ef1
         if self.is_evalframeex():
88d5ef1
-            pyop = self.get_pyop()
88d5ef1
-            if pyop:
88d5ef1
+            try:
88d5ef1
+                pyop = self.get_pyop()
88d5ef1
                 line = pyop.get_truncated_repr(MAX_OUTPUT_LEN)
88d5ef1
+            except:
88d5ef1
+                pyop = None
88d5ef1
+            if pyop:
88d5ef1
                 write_unicode(sys.stdout, '#%i %s\n' % (self.get_index(), line))
88d5ef1
                 if not pyop.is_optimized_out():
88d5ef1
                     line = pyop.current_line()
88d5ef1
@@ -1542,7 +1550,10 @@
88d5ef1
 
88d5ef1
     def print_traceback(self):
88d5ef1
         if self.is_evalframeex():
88d5ef1
-            pyop = self.get_pyop()
88d5ef1
+            try:
88d5ef1
+                pyop = self.get_pyop()
88d5ef1
+            except:
88d5ef1
+                pyop = None
88d5ef1
             if pyop:
88d5ef1
                 pyop.print_traceback()
88d5ef1
                 if not pyop.is_optimized_out():