code: func (c *RefCount) TrackObject(v interface{}) {
  	if !leakDetectionFlag {
  		return
  	}
  
  	var size int
  
  	switch v := reflect.ValueOf(v); v.Kind() {
  	case reflect.Ptr:
  		size = int(v.Type().Elem().Size())
  	case reflect.Array, reflect.Slice, reflect.Chan:
  		size = int(v.Type().Elem().Size()) * v.Cap()
  	case reflect.String:
  		size = v.Len()
  	default:
  		size = int(v.Type().Size())
  	}
  
  	runtime.SetFinalizer(c, func(c *RefCount) {
  		if c.NumRef() == 0 {
  			return
  		}
  
  		origin := getDebuggerRef(c).String()
  
  		leaks.Lock()
  		// Keep track of bytes leaked, not objects.
  		leaks.m[origin] += uint64(size)
  		leaks.Unlock()
  	})
  }
docs: // TrackObject sets up the initial internal state of the Ref for
  // leak detection.