func (p *Process) FindObject(a core.Address) (Object, int64) {
	// Round down to the start of an object.
	h := p.findHeapInfo(a)
	if h == nil {
		// Not in Go heap, or in a span
		// that doesn't hold Go objects (freed, stacks, ...)
		return 0, 0
	}
	x := h.base.Add(a.Sub(h.base) / h.size * h.size)
	// Check if object is marked.
	h = p.findHeapInfo(x)
	if h.mark>>(uint64(x)%heapInfoSize/8)&1 == 0 { // free or garbage
		return 0, 0
	}
	return Object(x), a.Sub(x)
}
func (p *Process) FindObject(a core.Address) (Object, int64) {
	
	h := p.findHeapInfo(a)
	if h == nil {
		
		
		return 0, 0
	}
	x := h.base.Add(a.Sub(h.base) / h.size * h.size)
	
	h = p.findHeapInfo(x)
	if h.mark>>(uint64(x)%heapInfoSize/8)&1 == 0 { 
		return 0, 0
	}
	return Object(x), a.Sub(x)
}
func ( p * Process ) FindObject ( a core . Address ) ( Object , int64 ) { // Round down to the start of an object. h := p . findHeapInfo ( a ) if h == nil { // Not in Go heap, or in a span // that doesn't hold Go objects (freed, stacks, ...) return 0 , 0 } x := h . base . Add ( a . Sub ( h . base ) / h . size * h . size ) // Check if object is marked. h = p . findHeapInfo ( x ) if h . mark >> ( uint64 ( x ) % heapInfoSize / 8 ) & 1 == 0 { // free or garbage return 0 , 0 } return Object ( x ) , a . Sub ( x ) }
// FindObject finds the object containing a.  Returns that object and the offset within
// that object to which a points.
// Returns 0,0 if a doesn't point to a live heap object.
FindObject finds the object containing a . Returns that object and the offset within that object to which a points . Returns 0 0 if a doesn t point to a live heap object .