code: def proxyval(self, visited):
          '''
          Scrape a value from the inferior process, and try to represent it
          within the gdb process, whilst (hopefully) avoiding crashes when
          the remote data is corrupt.
  
          Derived classes will override this.
  
          For example, a PyIntObject* with ob_ival 42 in the inferior process
          should result in an int(42) in this process.
  
          visited: a set of all gdb.Value pyobject pointers already visited
          whilst generating this value (to guard against infinite recursion when
          visiting object graphs with loops).  Analogous to Py_ReprEnter and
          Py_ReprLeave
          '''
  
          class FakeRepr(object):
              
  
              def __init__(self, tp_name, address):
                  self.tp_name = tp_name
                  self.address = address
  
              def __repr__(self):
                  # For the NULL pointer, we have no way of knowing a type, so
                  # special-case it as per
                  # http://bugs.python.org/issue8032#msg100882
                  if self.address == 0:
                      return '0x0'
                  return '<%s at remote 0x%x>' % (self.tp_name, self.address)
  
          return FakeRepr(self.safe_tp_name(),
                          long(self._gdbval))
docs: Scrape a value from the inferior process, and try to represent it
          within the gdb process, whilst (hopefully) avoiding crashes when
          the remote data is corrupt.
  
          Derived classes will override this.
  
          For example, a PyIntObject* with ob_ival 42 in the inferior process
          should result in an int(42) in this process.
  
          visited: a set of all gdb.Value pyobject pointers already visited
          whilst generating this value (to guard against infinite recursion when
          visiting object graphs with loops).  Analogous to Py_ReprEnter and
          Py_ReprLeave