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