docs: def Refresh():
      """looks up symbols within the inferior and caches their names / values.
  
      If debugging information is only partial, this method does its best to
      find as much information as it can, validation can be done using
      IsSymbolFileSane.
      """
      try:
        GdbCache.DICT = gdb.lookup_type('PyDictObject').pointer()
        GdbCache.TYPE = gdb.lookup_type('PyTypeObject').pointer()
      except gdb.error as err:
        # The symbol file we're using doesn't seem to provide type information.
        pass
      interp_head_name = GdbCache.FuzzySymbolLookup('interp_head')
      if interp_head_name:
        GdbCache.INTERP_HEAD = gdb.parse_and_eval(interp_head_name)
      else:
        # As a last resort, ask the inferior about it.
        GdbCache.INTERP_HEAD = gdb.parse_and_eval('PyInterpreterState_Head()')
      GdbCache.PENDINGBUSY = GdbCache.FuzzySymbolLookup('pendingbusy')
      GdbCache.PENDINGCALLS_TO_DO = GdbCache.FuzzySymbolLookup('pendingcalls_to_do')