mirror of
https://github.com/go-delve/delve.git
synced 2025-11-01 20:20:40 +08:00
Refactor: split read* into seperate functions
This commit is contained in:
@ -373,33 +373,40 @@ func (dbp *DebuggedProcess) extractValue(instructions []byte, typ interface{}) (
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offset := uintptr(int64(regs.Rsp) + off)
|
||||||
|
|
||||||
switch typ.(type) {
|
switch typ.(type) {
|
||||||
case *dwarf.IntType:
|
case *dwarf.IntType:
|
||||||
addr := uintptr(int64(regs.Rsp) + off)
|
return dbp.readInt(offset)
|
||||||
val, err := dbp.readMemory(addr, 8)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
n := binary.LittleEndian.Uint64(val)
|
|
||||||
|
|
||||||
return strconv.Itoa(int(n)), nil
|
|
||||||
case *dwarf.FloatType:
|
case *dwarf.FloatType:
|
||||||
var n float64
|
return dbp.readFloat64(offset)
|
||||||
addr := uintptr(int64(regs.Rsp) + off)
|
|
||||||
val, err := dbp.readMemory(addr, 8)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
buf := bytes.NewBuffer(val)
|
|
||||||
binary.Read(buf, binary.LittleEndian, &n)
|
|
||||||
|
|
||||||
return strconv.FormatFloat(n, 'f', -1, 64), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", fmt.Errorf("could not find value for type %s", typ)
|
return "", fmt.Errorf("could not find value for type %s", typ)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dbp *DebuggedProcess) readInt(addr uintptr) (string, error) {
|
||||||
|
val, err := dbp.readMemory(addr, 8)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
n := binary.LittleEndian.Uint64(val)
|
||||||
|
|
||||||
|
return strconv.Itoa(int(n)), nil
|
||||||
|
}
|
||||||
|
func (dbp *DebuggedProcess) readFloat64(addr uintptr) (string, error) {
|
||||||
|
var n float64
|
||||||
|
val, err := dbp.readMemory(addr, 8)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
buf := bytes.NewBuffer(val)
|
||||||
|
binary.Read(buf, binary.LittleEndian, &n)
|
||||||
|
|
||||||
|
return strconv.FormatFloat(n, 'f', -1, 64), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (dbp *DebuggedProcess) readMemory(addr uintptr, size uintptr) ([]byte, error) {
|
func (dbp *DebuggedProcess) readMemory(addr uintptr, size uintptr) ([]byte, error) {
|
||||||
buf := make([]byte, size)
|
buf := make([]byte, size)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user